<tr align="center" height="20">
			<td colspan="6">
				<c:if test="${currentPage != 1 }">
					<a href="/board/list.kh?page=${currentPage - 1 }">[이전]</a>
				</c:if>
				<c:forEach var="p" begin="${startNavi }" end="${endNavi }">
					<c:if test="${currentPage eq p }">
						<b>${p }</b>
					</c:if>
					<c:if test="${currentPage ne p }">
						<a href="/board/list.kh?page=${p }">${p }</a>
					</c:if>
				</c:forEach>
				<c:if test="${maxPage > currentPage }">
					<a href="/board/list.kh?page=${currentPage + 1 }">[다음]</a>
				</c:if>
			</td>
		</tr>

지금 니가 보는것이 몇페이진가..........ㅋㅋ

내가 보고 있는 페이지가 진하게 표시된다.

 

<body>
	<h1 align="center">${board.boardNo }번 게시글 수정하기</h1>
	<br><br>
	<form action="/board/modify.kh" method="post" enctype="multipart/form-data">
		<input type="hidden" name="boardNo" value="${board.boardNo }">
		<input type="hidden" name="boardFilename" value="${board.boardFilename }"> 
		<input type="hidden" name="boardFileRename" value="${board.boardFileRename }">
		
		<table align="center" border="1">
			<tr>			
				<td>제목</td>
				<td><input type="text" name="boardTitle" value="${board.boardTitle }"></td>
			</tr>
			<tr>			
				<td>작성자</td>
				<td><input type="text" name="boardWriter" value="${board.boardWriter }" readonly></td>
			</tr>
			<tr>			
				<td>내용</td>
				<td><textarea  cols="30" rows="7" name="boardContents" >${board.boardContents }</textarea></td>
				<!--textarea는 value이 없어서 태그사이에 값으로 넣어준것임.  -->
			</tr>
			<tr>			
				<td>첨부파일</td>  <!--첨부파일에는 value값이 없다  -->
				<td><input type="file" name="reloadFile" >
					<a href="#">${board.boardFilename }</a>
				</td>
			</tr>
			<tr>			
				<td colspan="2">
					<input type="submit" value="수정">
					<a href="/board/list.kh">목록으로</a>
					<a>이전 페이지로</a>
				</td>
			</tr>
		</table>
	</form>

</body>​

게시글 수정하기....그중 포인트는 첨부파일이다.

처음 등록할때 name이 uploadFile이였는데 수정안해서 오류 발생했다....

	public ModelAndView boardModify(@ModelAttribute Board board
			,ModelAndView mv
			, @RequestParam(value="reloadFile",required=false)MultipartFile reloadFile //위에서 upload였는데 여기선 reloadFile로 변경
			, HttpServletRequest request) {
		try {
			String boardFilename=reloadFile.getOriginalFilename();
			if(reloadFile !=null && !boardFilename.equals("")) {
				//파일 이 있거나, 파일명이 있을때
				// 수정방법 = 1, 대체 2, 삭제 후 저장  ==>삭제후 저장이 오히려 편함
				//파일 경로를 알아야 한다. 리케스트 필요 httpHttpServletRequest request
				//파일 삭제
				String root=request.getSession().getServletContext().getRealPath("resources");
				String savedPath = root + "\\buploadFiles";
				// 파일이름을 갖고 오고자 db로 갈필요는 없음. 이 jsp에 board 자료가 있음
				
				File file= new File(savedPath+"\\"+board.getBoardFileRename());//file.io 
				if(file.exists()) { //파일이 정말 있는지 확인
					file.delete(); //파일 지움
				}
				//삭제 했으니깐 다시 저장
				SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");
				String boardFileRename=sdf.format(new Date(System.currentTimeMillis()))+"."
						+boardFilename.substring(boardFilename.lastIndexOf(".")+1); 
				//substring 때문에 1을 더한것임
				//lastIndexOf(".")은 파일.뒤의 확장자 구하는 것이다.
				String boardFilepath=savedPath+"\\"+boardFileRename;
				reloadFile.transferTo(new File(boardFilepath));
		

				board.setBoardFilename(boardFilename);				
				board.setBoardFileRename(boardFileRename);
				board.setBoardFilepath(boardFilepath);
			}
			int result=bService.modifyBoard(board);
			mv.setViewName("redirect:/board/list.kh");
		}catch(Exception e) {
			mv.addObject("msg", e.toString()).setViewName("common/errorPage");
		}
		return mv;

param으로 첨부파일 가져올때 명칭 조심!

파일삭제할때 위치한 폴더는 getRealPath("resources")인가보다....타이핑 치다보면 계속 놓친다.

파일 저장은 위에서 복사 넣기 인데  여기서 필요 없는 부분도 많으니깐 잘 보고 가져오기!!!

<update id="updateBoard">
		UPDATE BOARD_TBL SET BOARD_TITLE=#{boardTitle}, BOARD_CONTENTS=#{boardContents},
        BOARD_FILENAME=#{boardFilename},BOARD_RENAME=#{boardFileRename}, 
        BOARD_FLIEPATH=#{boardFilepath} , B_UPDATE_DATE=DEFAULT WHERE BOARD_NO=#{boardNo}
	</update>

매핑 할때 오타와 기호 조심///////, 빼먹었더니........난리다 난리....

이렇게 첨부파일 수정하였음

이전 /다음 /처리 

 

 

<tr align="center" height="20">
<td colspan="6">
<c:if test="${startNavi !=1}">
<a href="/board/list.kh?page=${startNavi - 1 }">[이전]</a>

</c:if>
    <c:forEach var="p" begin="${startNavi }" end="${endNavi }">
    <a href="/board/list.kh?page=${p }">${p }</a>
    </c:forEach>
<c:if test="${maxPage-1 > currentPage }">
<a href="/board/list.kh?page=${endNavi+1 }">[다음]</a>
<%-- <a href="/board/list.kh?page=${currentPage+5 }">[다음]</a>--%>
</c:if>
</td>

 

 

if 문으로 가능하다.

 

이날 한게 많은데...넘많아서...못올린다..

배웠는데 너무 새로운 페이징.....jsp스쳐지나갔다.....

스프링으로 새롭게...

이제 실제 적용 시....게시판 리스트를 출력하자....

리스트 데이터를 받아서 출력하는 부분과 페이징 부분을 출력하는 부분......

CONTROLLER 페이징 처리와 리스트 가져오는 것을 동시에 함.

SERVICE에서 SESSION 가져오는 건 생략함......

중요한것은 STORE에서  RowBounds 자동처리 하는 것 으로 이렇게하면 단순 전체리스트 가져오는 쿼리 매핑 부분에는 변함없이 그냥 자동으로 처리해준다.

 

자동으로 막올라간다......ㅋㅋㅋㅋ

1. 앞선 진행한 null값 ..화면에서 value 없을때 null로 처리 할수 있는 방법. 자동으로 DB에 NULL로 입력된다....완전 편해지는 거지....

 

2. 폴더의 위치가 길어지면 코드가 지저분해짐으로 별칭을 정해서 별칭만 입력하면 되므로 편해진다.

이렇게 단축시쳐줌....이걸할때 한가지 더했는데

Member라는 객체가 파라미터 값으로 올꺼라구 선안내 해준것이다 String이면 String 으로 작성하면 되는데,,,,int값일 경우에는 기재하는 방법은 위에 기재했으로 꼭 참고 해야한다^^

 

드디어 마지막 회원정보 수정들어갑니다...

 

탈퇴하기 버튼 누르면 시작합니다........이벤트연결시키는데

중요사항!!! button 과 input이 같이있는데 이벤트 진행하면 input도 반응하기에

꼭!!!! button에 type을 설정해야한다......

 

 

드디어 마지막 회원정보 수정들어갑니다...로그인 정보는 session에 넣어두었던거 불러옴

 

 Impl과 Logic은 그동안 한거랑 비슷비슷

기존의 delete로 시작했으나 오늘은 회원관리 한단계 한가지 더 배움.......

보통 사용자는 회원탈퇴를 했으나 차후관리를 위해 db에 남겨두는 경우가 있는데 이렇게 진행하는 것으로 보임.... 실제 조회는 M_STATUS='Y'만 되는 조건을 두고

삭제요청이 온다면 /N/으로 변경하여 검색할수 없도록 조치하는 것임.......프로젝트에도 참고해야함^^

session은 브라우저가 종료될때가지 정보 보관함...

loginUser정보를 이용하여 수정시 id값을 가져옴...

이쯤되면 매핑 문구 간단해짐/ 가져온 정보를 controller에서 다시 화면으로 보내줘야함..

주소에 ,로 같이 저장된 우편번호를 분류해야함.

mOne으로 선언엔 Member객체를 새로 만들고 거기서 주소를 따로 빼내어 콤마(,)구분자로 배열화 시키고

그걸 로 보내주기 위하여 작업한 내용임...

짜잔!!!이렇게 잘 나오게 됨...

차후 분류 작업을 할때 요긴하게 쓰일것임.^^

value에 controller에서 받은 값을 매치시켜주고 우편주소 배열이니깐  잘 넣어줘야함...

중요한것 같으나 이해안되서한번더 정리해보기로 하는 파일들

1.web.xml

2.servlet-context.xml

3.root-context.xml ..^^

.

.

1.web.xml

web.xml의 설정 내용에는 3가지 역할이 있는데

. DispatcherServlet 클라이언트의 요청을 처리함.

브라우저가 java Servlet에 접근하기위해 톰캣이나 URL정보를 알려주는 역할을 한다.

servlet의 name은 반드시 일치 해야하고  class 는 실제 클래스의 이름이라고 블로그글은 그랬으나 여기서는 아니고.....

매핑 : URL을 서블릿 이름에 연결하는 것으로

       url-pattern :  브라우저에서 요청  url 프로젝트(앱) 이름 뒤에 오는 부분으로 / 슬래시로 시작한다.

 

 

. ContextLoaderListener  : controller가 공유하는 bean들을 포함하는 spring Container생성한다. (컨덱스트단위설정)

   .service-context.xml : service관련                                                           /WEB-INF/service-context.xml

   .dao-contes.xml: Dao관련                                                                       /WEB-INF/Dao-context.xml

   .applicationContext.xml :   DataSource관련, properties등록, SessionFactroy, TransactionManager등

                                                                                                                /WEB-INF/applicationContext.xml

   .security-context.xml : Security관련, BCryptPasswordEncoder등      /WEB-INF/applicationContext.xml

   .cf)salesServlet-servlet.xml :  controller관련, ViewRelolver.,mvc:annotation-driven설정등

root-context.xml에 JDBCTemplate할때들어갔던 정보들이 있다.

 

                                                                                                       

.encodingFilter :꼭 거쳐야하는 것...

 

찾아 보다가 좋은 티스토리 선배님 글이 있어서 링크도 걸어 둔다...나중을 위해.https://tlatmsrud.tistory.com/35

 

[Spring] web.xml 이란? / 예제

1. 개요 실무 투입한지 거의 1년이 다 되어갈 무렵, web.xml 코드를 보던 중 문득 이런 생각이 들었다. '웹 애플리케이션의 첫 단추인 web.xml에 대해 누군가에게 설명할 수 있을까?'  1년간 일은 열심

tlatmsrud.tistory.com

 

2.servlet-context.xml

절대경로 짧아진다는데 완전조으다....어려운 경로지정....왜 안먹히냐구요..ㅠㅠ

이것도 좋은 설명이 있어서 같이 참고...https://needneo.tistory.com/204

 

[Spring] 뷰 리졸버(View Resolver) 개념 이해하기

스프링 백엔드에서 데이터를 처리하거나 가지고 왔다면, 이 데이터를 View의 영역으로 전달을 해야 한다. 이때 View를 어떤 것을 사용할지 자유롭게 설정을 할 수 있는데 이 설정 역할을 하는 것이

needneo.tistory.com

 

3.root-context.xml 

여기서 등록되어 있기에 service

가져다 쓸수 있는 것인가 보다...로 결론^^

추가로 프로젝트를 만들때 기본적으로 있었던 파일들에 대해 기록하기로 한다.

1.web.xml

2.servlet-context.xml

3.root-context.xml

 

나중에 찾아보기 울것같다.......새로운 파일로 다시...^^

+ Recent posts