내 멋대로 개발
[쇼핑몰 프로젝트] **문제해결 과정, 고민 정리** 본문
이제까지 쇼핑몰 프로젝트하면서 정리했던 문제해결 과정
[문제 해결]
▶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 정보를 전체 조회할 때 에러가 발생하기 때문에 트랜잭션의 원리로 하나가 문제 발생하면 이전 상태로 복원하는 성질을 살려서 사용
=>트랜잭션 내 모든 연산들이 정상적으로 완료되지 않으면 아무 것도 수행되지 않은 원래 상태로 복원되어야 한다.
[추가 기능으로 구현해야할 것들]
▶비밀번호 암호화
▶쇼핑몰 결제 (아임포트 카카오페이)
'Java' 카테고리의 다른 글
[Spring] 쇼핑몰 프로젝트(5)_자유게시판(게시판 목록, 글 작성) (0) | 2020.09.19 |
---|---|
[Spring] 쇼핑몰 프로젝트(4)_마이페이지(개인정보, 정보 수정), 회원 탈퇴 (0) | 2020.09.19 |
[Spring] 쇼핑몰 프로젝트(3)_아이디 찾기, 비밀번호 찾기 (0) | 2020.09.11 |
[Spring] 쇼핑몰 프로젝트(2)_기본설정 및 로그인과 회원가입 (0) | 2020.09.02 |
[Spring] 쇼핑몰 프로젝트(1)_DB 설계( 1차db) (0) | 2020.09.01 |