@ 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로 바로 넘겨주면 수치 부적합이 뜬다.
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'">
</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'">
</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'">
'교육 정리 > 입사교육' 카테고리의 다른 글
mavenBoard 만들기 5 (파일 게시판 만들기2) (0) | 2021.08.08 |
---|---|
mavenBoard 만들기 3,4 (페이징 재도전3, 파일 게시판 만들기) (0) | 2021.08.05 |
mavenBoard 만들기 (0) | 2021.08.03 |
교육환경 만들기, mavenBoard 오류 고치기 (0) | 2021.08.02 |
글쓰기 Test (0) | 2021.08.01 |
댓글