Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

내 멋대로 개발

[쇼핑몰 프로젝트] **문제해결 과정, 고민 정리** 본문

Java

[쇼핑몰 프로젝트] **문제해결 과정, 고민 정리**

youngna 2020. 12. 19. 03:49

이제까지 쇼핑몰 프로젝트하면서 정리했던 문제해결 과정

 

 

[문제 해결]

▶Board(테이블)의 bFile(컬럼)안에 bFile(변수)의 orgFileName을 넣는 방법??

-> 원래 파일에 대한 테이블은 따로 없고 Board 테이블 안에 bFile 한 컬럼만 있었는데 파일용 테이블을 생성함으로 해결

 

▶글 작성에서 파일을 첨부하면 잘 넘어가는데, 파일이 비어있을 경우 에러발생 

-> melonpeach.tistory.com/51?category=806570

-> (파일 업로드 메소드 정리)m.blog.naver.com/PostView.nhn?blogId=wix1&logNo=150011903832&proxyReferer=https:%2F%2Fwww.google.com%2F

 

▶modal 창이 안뜸

-> 부트스트랩이랑 jquery 라이브러리 순서 중요 ! 버전 체크도하기

 

▶board insert할 때 bFile을 name="file"인 input창 태그를 가져옴 -> Controller로 이동하여 해당 form의 /insertBoard.do를 찾아감 -> 해당 메소드는 board 객체와 파일을 가져올 수 있는 upfile을 가짐 -> boardService로 이동시키는 구문을 타고 b와 upFile을 함께보냄 -> 먼저 글을 작성하는 구문을 실행(이 과정에서 bFile이 null로 들어감)

파일 테이블의 게시물 코드가 board테이블의 게시물 코드를 참조중

-> 게시물 코드가 같으면 작성자를 알 수 있고, 작성자를 알면 사용자를 알 수 있음

-> 그럼 board의 파일을 없애고 별도의 테이블로 만들까?.. jsp에서 form 안에 같이 있어도되나?...

    아니면 board에서 bFile 컬럼을 없애볼까?(o) 

 

▶댓글에서 삭제가 자꾸 안됐던 이유

-> onclick에서 this를 안써줬기때문.

 

▶댓글 수정

문제) coCode를 이용해서 어떤 댓글인지 가져오고, coContent를 통해 댓글 내용을 수정하려했는데 bc(bComment)로 통째로 가져올라했더니 못 가져오는 것 같음

 

현재 상황) 댓글 내용이 바뀌지는 않고 수정완료 버튼 클릭시 다시 게시물 페이지로 돌아옴

-> 이말은 즉, jsp에서 coCode와, coContent,bCode를 가지고 controller로 가긴한다는 것

 

mapper까지 가지도 않음.. 아마 컨트롤러에서 바로 반환한 듯

 

=>jsp에 input hidden으로 해서 bCode와 coCode를 받아와야했음!! 

 

▶게시물 검색에서 bSecret을 못가져옴

-> mapper에서 select 구절에 BSECRET AS bSecret을 추가

 

▶게시물 검색시 페이지는 검색한 게시물 수대로 나타나는데, 예를들어 검색 직후 1페이지에서 2페이지로 넘어가려고 클릭하면 전체 게시물 게시판으로 넘어가짐

-> pageNavi 코드 중 if문의 조건을 바꿔줌  if(search.getKeyword() !=null)

 

▶아이디 찾기 - 이메일 인증

java.lang.ClassCastException:java.lang.String cannot be cast to java.util.HashMap에러 발생

-> mapper에서 resultType을 String에서 map의 형태로 바꿔줌

 

▶이메일 인증 후 성공페이지로 이동

->@ResponseBody 이걸 지우면 페이지 이동이 가능

->boolean 타입말고 String 타입으로 바꿔서 페이지 이동이 가능하게 함 

 

▶한글 인코딩

-> web.xml <filter>태그에서  / 가 아닌 /*로 해야함

 

우에서 좌로 슬라이드 메뉴 만들기 

m.blog.naver.com/websearch/221761497141

 

<css z-index는 요소의 위치(ex)맨 앞, 맨 뒤) >  
체크박스, 라디오 버튼 -1> #header 10001 > #header a.navPanelToggle 10003 >#banner .inner 10005 >navPanel 창 10010 

 

▶ ck에디터 upfile의 문제 

경로의 문제 ! servlet-context.xml에서 업로드패쓰 경로체크하기 

 

비밀글 비밀번호 확인 modal에서 아무렇게나 쓰고 확인 눌러도 넘어감

-> jquery로 값 비교 방식 사용

 

글작성 비어있으면 false

-> 스크립트 중에 form.sumit()이 있어서  required가 안먹었었음

 

admin-register textarea는 비어있으면 안넘어가야하는데 오류로 넘어가버림

$('.gdsBtn').click(function(){
 if(CKEDITOR.instances.gdsDetail.getData() == '' || CKEDITOR.instances.gdsDetail.getData().length ==0){
alert('내용을 입력해주세요.');
return false;

 return true;
});

 

shop-cartList  checkbox 안나타남 <label> 쓰면 모든 checkbox가 이어져있음(input의 id랑 label의 for의 관계 : label 문자(글씨)클릭시 체크 가능 - 체크할수있는 범위를 늘려줌)

->input의 id랑 label의 for 의 연관성을 이용해서 ${cartList.cCode}로 값을 통일하여 각각의 체크박스를 체크할 수 있도록함

 

삭제 버튼을 눌렀을 때

onclick = fn_del('${file.FCODE}','FCODE_${var.index}');  // fCode,  for문의 돌아가는 상태를 알 수 있게 0부터 순서를 매김

fileNoDel  (삭제된 파일의 코드)
fileNameDel (삭제된 파일의 이름)

삭제 번호 눌렀을 때 )  value=fCode_______ name=순서 번호

1. 삭제 버튼을 클릭했을 경우 fCode와 순서를 나타내는 숫자를 보내줌 
2. 그것이 변수명 value와 name으로 가져옴
3. 먼저 fCodeArry 이름에다가 push(value)해줌 [ fCode를 넣어줌 ] ->배열의 마지막에 새로운 요소를 추가하고 변경된 배열 길이를 반환
4. fileNameArry에다가 push(name)를 해줘 삭제한 번호를 담아줌 [ 번호를 넣어줌 ]-> 
fCodeArry = fCode
fileNameArry = 파일의 인덱스 
5. input의 fileNoDel의 value에 fCode담은 Arry를 보내줌 

 

1)처음 상태 -> 2)수정 -> 3)취소 -> 4)수정    
=> 댓글 사라짐

---------------------------------------------------------------------------------------

1) 처음 상태 

$('.commentUpdateFrm').hide();

-> 수정창은 숨긴상태 / 댓글, 수정버튼, 삭제버튼만 보임

 

2) 수정 버튼 클릭 시

function commentUpdate(obj) {
	var btn = $(obj);		//수정버튼을 btn이라고 별칭함
           	btn.parent().next().show();	// 숨겨놨던 수정 폼을 보여줌
	btn.parent().hide();		// 댓글, 수정버튼, 삭제버튼 숨김
           	btn.prev().hide();		//<span> 숨김 = 댓글
	}	

3) 취소 버튼 클릭 시 

function commentUpdateCancle(obj){
	var btn = $(obj);				//취소 버튼을 btn이라 별칭함
	btn.parent().parent().prev().show();		//댓글, 수정버튼, 삭제버튼을 보여줌 
	btn.parent().hide();				//수정창을 숨김
	btn.parent().parent().prev().children('span').show();	//<span>을 보여줌
	}


4) 다시 수정 버튼 클릭 시

시작을 display : none; 해서 수정창을 숨김 
수정 버튼을 누르면 나타나고 
수정창에서 취소를 하면 원래 댓글 창으로 나옴
거기서 또 수정을 누르면 댓글이 지워져버림 (해당 댓글만 )


1. 초기 상태에서는 수정 폼 li에 none을 걸어둔 상태 
2. 수정 버튼 클릭시 - 댓글 li, <span> 태그가 none 걸리고,, 수정폼 li는 list-item으로 나타남
3. 취소 버튼 클릭시 - 댓글 li, <span> 태그가 나타나는데 style 걸려있음,, <form> 태그 none 걸림
--->여기서 form에 none을 거는게아니라 li에 걸었어야 로직이 맞음 !!!
4. 두번 째 수정 버튼 클릭시 - 댓글 li, <span>태그 none 걸림  

 

 


[고민]

▶삭제, 수정 버튼을 session을 이용해서 사용자의 게시물일 때만 버튼이 보이게 -- 아이디를 이용

   수정, 삭제 버튼 같이 있게??

   수정 페이지 들어가면 삭제있게??

-> 작성자 본인일 때만 수정, 삭제 보이게

 

▶비밀번호는 언제??

- 비밀글은 '비밀글 입니다.'로 제목 바뀌게 

  -> 문제해결) 비밀글 여부를 못가져왔었는데 sql문에서 bSecret을 안가져와서 못가져왔었음

- 당사자가 아닌 사람들은 못보게 

- 관리자는 비밀번호 없이 조회 가능

- 관리자는 원래 사용자가 설정한 제목으로 보임

 

▶로그인을 안 한 상태로 댓글 작성시, 내가 원하는 루트는 로그인창으로 가는 것!

->controller에서(o) / jsp에서 script로

 

▶관리자와 사용자 구분하기

[인터셉터를 사용]
인터셉터란, 특정 경로를 요청하여 컨트롤러에 접근하는 도중에 가로채서(interceptor) 그 전/후에 실행되는 기능
- 테이블 하나로 진행 (0) 
- 관리자, 사용자 테이블 두개로? (x) 
**프로젝트가 실행되는 웹 환경과 관련된 설정은 servlet-context에서 설정

 

< Controller >
[ 게시판 수정뷰  /boardUpdateView.do]

업데이트 게시판에 파일 리스트를 뿌려줄 수 있도록 List<Map에 담아줌 (ㅇ)

 

[ 게시판 수정 / boardUpdate.do]

여기서 메소드의 파라미터 값으로 requestParam을 사용 

 

잠깐 ! @RequestParam은 단일 파라미터를 전달 받을 때 사용하는 어노테이션
Key=Value 형태의 HTTP 요청 파라미터를 메소드의 파라미터에 전달


[정리]

▶트랜잭션 사용이유(조회수)

-> 조회수가 제대로 처리되지 않으면 board 정보를 전체 조회할 때 에러가 발생하기 때문에 트랜잭션의 원리로 하나가 문제 발생하면 이전 상태로 복원하는 성질을 살려서 사용
=>트랜잭션 내 모든 연산들이 정상적으로 완료되지 않으면 아무 것도 수행되지 않은 원래 상태로 복원되어야 한다. 


[추가 기능으로 구현해야할 것들]

비밀번호 암호화

쇼핑몰 결제 (아임포트 카카오페이)