본문 바로가기
교육 정리/입사교육

mavenBoard 만들기 2 (수정, 삭제 구현, 페이징 재도전2)

by Jint 2021. 8. 4.

@ mavenBoard 만들기 2 (수정, 삭제 구현, 페이징 재도전2)


https://melonpeach.tistory.com/27?category=806570 - 참고

- freeBoardMapper.xml
https://javaexpert.tistory.com/503 - 참고(ROW_NUMBER() OVER)

-> 실패 : java.sql.SQLSyntaxErrorException: ORA-01722: invalid number
Mapper로 데이터를 넘겨도 자꾸 수치 부적합이 뜬다. Class형태로 넘겨도 오류, 가공하여 Map으로 넘겨도 오류.
Service에서 mapper.xml로 바로 넘겨주면 수치 부적합이 뜬다.

 


★재도전2
https://medium.com/@wjdcjf1229/%EC%BD%94%EC%8A%A4%ED%83%8063%EC%9D%BC%EC%B0%A819-01-31-%EC%8A%A4%ED%94%84%EB%A7%81-%EA%B2%8C%EC%8B%9C%ED%8C%90-%ED%8E%98%EC%9D%B4%EC%A7%95%EC%B2%98%EB%A6%AC-%EA%B2%80%EC%83%89-%EB%B7%B0-9c312c19733c - 참고


CREATE TABLE FREEBOARD(
NUM NUMBER(5),
NAME VARCHAR2(20),
TITLE VARCHAR2(100),
CONTENT VARCHAR2(1000),
REGDATE DATE,
  CONSTRAINT PK_FREEBOARD PRIMARY KEY (NUM)
);

INDEX로 값을 뽑아오기 위해 PK 설정.

- Criteria.java

- PageDTO.java

- freeBoardMapper.xml

- FreeBoardMapper.java

 

-> 값을 mapper 인터페이스를 이용하여 넘기려고 하지만 java.lang.NullPointerException 오류가 뜨면서 넘어가지 않는다. mapper 인터페이스를 사용하도록 설정했음에도 불구하고 안 넘어간다.

@ html 기본 구현


1. 다시쓰기 버튼 클릭 시 작성한 내용 모두 삭제 (페이지 이동X)
- freeBoardInsert.jsp

<input type="reset" value="다시쓰기" onclick="document.myForm.name.focus();">



2. 취소 클릭 시 conform창을 통하여 취소 여부 확인 및 취소 선택 시 메인 페이지로 이동
- freeBoardInsert.jsp

<input type="button" value="취소" onclick="cancel();">
function cancel() {
		
		f = document.myForm;
		
		if(confirm("글쓰기를 취소하고 리스트로 돌아가시겠습니까?") == true) {
			location.replace('./main.ino');
		}else {
			return false;
		}
		
}



3. 이름, 제목, 작성일, 내용은 수정 불가 되도록 속성값 변경
- freeBoardDetail.jsp

<div style="width: 150px; float: left;">이름 :</div>
<div style="width: 500px; float: left;" align="left"><input type="text" name="name" value="${freeBoardDto.name }" readonly/></div>
		
<div style="width: 150px; float: left;">제목 :</div>
<div style="width: 500px; float: left;" align="left"><input type="text" name="title"  value="${freeBoardDto.title }" readonly/></div>
	
<div style="width: 150px; float: left;">작성날자</div>
<div style="width: 500px; float: left;" align="left"><input type="text" name="title"  value="${freeBoardDto.regdate }" readonly/></div>
	
<div style="width: 150px; float: left;">내용 :</div>
<div style="width: 500px; float: left;" align="left"><textarea name="content" rows="25" cols="65" readonly>${freeBoardDto.content }</textarea></div>
<div align="right">



4. 수정 버튼 클릭 시 수정 페이지로 이동 / 수정 버튼 클릭 시 글 수정 후 메인 페이지로 이동
- freeBoardDetail.jsp

<div>
	<h1>자유게시판</h1>
</div>
<div style="width:650px;" align="right">
	<a href="./main.ino">리스트로</a>
</div>
<hr style="width: 600px">

<form action="./freeBoardInsertPro.ino">
	<div style="width: 150px; float: left;">이름 :</div>
	<div style="width: 500px; float: left;" align="left"><input type="text" name="name" value="${freeBoardDto.name }" readonly/></div>

	<div style="width: 150px; float: left;">제목 :</div>
	<div style="width: 500px; float: left;" align="left"><input type="text" name="title"  value="${freeBoardDto.title }" readonly/></div>

	<div style="width: 150px; float: left;">작성날자</div>
	<div style="width: 500px; float: left;" align="left"><input type="text" name="title"  value="${freeBoardDto.regdate }" readonly/></div>

	<div style="width: 150px; float: left;">내용 :</div>
	<div style="width: 500px; float: left;" align="left"><textarea name="content" rows="25" cols="65" readonly>${freeBoardDto.content }</textarea></div>
	<div align="right">
	<input type="button" value="수정" onclick="location.href='./freeBoardUpdate.ino?num=${freeBoardDto.num }'">
	<input type="button" value="취소" onclick="location.href='./main.ino'">
	&nbsp;&nbsp;&nbsp;
	</div>

</form>



- freeBoardUpdate.jsp

	<div>
		<h1>자유게시판</h1>
	</div>
	<div style="width:650px;" align="right">
		<a href="./main.ino">리스트로</a>
	</div>
	<hr style="width: 600px">
	
	<form action="./freeBoardUpdatePro.ino" name="myForm">
		<div style="width: 150px; float: left;">이름 :</div>
		<div style="width: 500px; float: left;" align="left"><input type="text" name="name" value="${dto.name }"/></div>
		
		<div style="width: 150px; float: left;">제목 :</div>
		<div style="width: 500px; float: left;" align="left"><input type="text" name="title" value="${dto.title }" readonly/></div>
		
		<div style="width: 150px; float: left;">내용 :</div>
		<div style="width: 500px; float: left;" align="left"><textarea name="content" rows="25" cols="65">${dto.content }</textarea></div>
		
		<input type="hidden" name="num" value="${dto.num }"/>
		<input type="hidden" name="regdate" value="${dto.regdate }"/>
		
		<div align="right">
		<input type="submit" value="수정">
		<input type="button" value="삭제" onclick="remove();">
		<input type="button" value="취소" onclick="location.href='./main.ino'">
		&nbsp;&nbsp;&nbsp;
		</div>
	
	</form>
	function remove() {
		
		f = document.myForm;
		
		if(confirm("글을 삭제 하시겠습니까?") == true) {
			location.replace('./freeBoardDelete.ino?num=' + ${dto.num});
		}else {
			return false;
		}
		
	}

 


- FreeBoardController.java

	@RequestMapping("/freeBoardUpdate.ino")
	public ModelAndView freeBoardUpdate(HttpServletRequest request) {
		
		int num = Integer.parseInt(request.getParameter("num"));
		
		ModelAndView mav = new ModelAndView();
		
		mav.setViewName("freeBoardUpdate");
		mav.addObject("dto", freeBoardService.getDetailByNum(num));
		
		return mav;
		
	}
	
	@RequestMapping("/freeBoardUpdatePro.ino")
	public ModelAndView freeBoardUpdatePro(FreeBoardDto dto) {
		
		freeBoardService.freeBoardUpdatePro(dto);
		
		ModelAndView mav = new ModelAndView();
		
		mav.setViewName("redirect:/main.ino");
		
		return mav;
		
	}



- tiles.xml

    <definition name="boardMain" extends="mainTemplate">
        <put-attribute name="header" value="/WEB-INF/view/template/defaultHeader.jsp" />
        <put-attribute name="menu" value="/WEB-INF/view/template/defaultMenu.jsp" />
        <put-attribute name="footer" value="/WEB-INF/view/template/defaultFooter.jsp" />
        <put-attribute name="content" value="/WEB-INF/view/freeBoard/freeBoardMain.jsp" />
    </definition>
    <definition name="freeBoardInsert" extends="mainTemplate">
        <put-attribute name="header" value="/WEB-INF/view/template/defaultHeader.jsp" />
        <put-attribute name="menu" value="/WEB-INF/view/template/defaultMenu.jsp" />
        <put-attribute name="footer" value="/WEB-INF/view/template/defaultFooter.jsp" />
        <put-attribute name="content" value="/WEB-INF/view/freeBoard/freeBoardInsert.jsp" />
    </definition>
    <definition name="freeBoardDetail" extends="mainTemplate">
        <put-attribute name="header" value="/WEB-INF/view/template/defaultHeader.jsp" />
        <put-attribute name="menu" value="/WEB-INF/view/template/defaultMenu.jsp" />
        <put-attribute name="footer" value="/WEB-INF/view/template/defaultFooter.jsp" />
        <put-attribute name="content" value="/WEB-INF/view/freeBoard/freeBoardDetail.jsp" />
    </definition>
    <definition name="freeBoardUpdate" extends="mainTemplate">
        <put-attribute name="header" value="/WEB-INF/view/template/defaultHeader.jsp" />
        <put-attribute name="menu" value="/WEB-INF/view/template/defaultMenu.jsp" />
        <put-attribute name="footer" value="/WEB-INF/view/template/defaultFooter.jsp" />
        <put-attribute name="content" value="/WEB-INF/view/freeBoard/freeBoardUpdate.jsp" />
    </definition>

 

실제 jsp파일 찾도록 경로 설정.


- FreeBoardService.java

public void freeBoardUpdatePro(FreeBoardDto dto) {
	sqlSessionTemplate.update("freeBoardUpdatePro",dto);
}



- freeBoardMapper.xml

<select id="freeBoardDetailByNum" resultType="freeBoardDto" parameterType="int">
	SELECT NUM, TITLE, NAME, TO_CHAR(REGDATE,'YYYY/MM/DD') REGDATE, CONTENT FROM FREEBOARD
	WHERE NUM=#{num}
</select>
	
<update id="freeBoardUpdatePro" parameterType="freeBoardDto">
	update freeboard set name = #{name},content = #{content} where num = #{num}
</update>



5. 제목, 작성일은 수정 불가되도록 속성값 변경.
- freeBoardUpdate.jsp

<div style="width: 150px; float: left;">제목 :</div>
<div style="width: 500px; float: left;" align="left"><input type="text" name="title" value="${dto.title }" readonly/></div>



6. 삭제 버튼 클릭 시 삭제 확인 여부 확인 후 삭제
- freeBoardMapper.xml

<delete id="freeBoardDelete" parameterType="int">
	delete freeboard where num = #{num}
</delete>


- FreeBoardService.java

public void freeBoardDelete(int num) {
	sqlSessionTemplate.delete("freeBoardDelete",num);
}



- FreeBoardController.java

@RequestMapping("/freeBoardDelete.ino")
	public ModelAndView freeBoardDelete(HttpServletRequest request) {
		
		int num = Integer.parseInt(request.getParameter("num"));
		
		freeBoardService.freeBoardDelete(num);
		
		ModelAndView mav = new ModelAndView();
		
		mav.setViewName("redirect:/main.ino");
		
		return mav;
		
}



- freeBoardUpdate.jsp

<input type="button" value="삭제" onclick="remove();">
function remove() {
		
		f = document.myForm;
		
		if(confirm("글을 삭제 하시겠습니까?") == true) {
			location.replace('./freeBoardDelete.ino?num=' + ${dto.num});
		}else {
			return false;
		}
		
}



8. 취소 버튼 클릭 시 메인 페이지로 이동
- freeBoardUpdate.jsp

<input type="button" value="취소" onclick="location.href='./main.ino'">

댓글