/********************************************** QnA : 수정 *******************************************************/
@RequestMapping("boardQnaUpdateView.bo")
public String boardUpdateForm() {
return "boardQnaUpdateForm";
}
@RequestMapping("boardQnaUpdateForm.bo")
public String updateBoardQna(@ModelAttribute BoardQnA b, @RequestParam("page") int page,
HttpSession session) {
String id = ((Member)session.getAttribute("loginUser")).getEmail();
b.setEmailId(id);
int result = bService.updateBoardQna(b);
if(result > 0) {
//model.addAttribute("board", b)...;
// 보드 보낼 필요없음. 화면 상세보기 페이지로 가기 때문에 상세보기 페이지로 가는 bdetail.bo 이용하면 됨
//return "redirect:bdetail.bo?bId=" + b.getBoardId() + "&page=" + page;
// 리다이렉트인데 데이터보존됨
// model.addAttribute("bId",b.getBoardId());
// model.addAttribute("page",page);
return "redirect:boardQna.bo";
} else {
throw new BoardException("문의사항 수정에 실패하였습니다.");
}
}
/********************************************** QnA : 삭제 *******************************************************/
@RequestMapping("boardQnaDeleteForm.bo")
public String deleteBoard(@ModelAttribute BoardQnA b, HttpSession session) {
String id = ((Member)session.getAttribute("loginUser")).getEmail();
b.setEmailId(id);
int result = bService.deleteBoardQna(b);
if(result > 0) {
return "redirect:boardQna.bo";
}else {
throw new BoardException("QnA 삭제에 실패하였습니다.");
}
}
Service & DAO
// BoardService
int updateBoardQna(BoardQnA b);
int deleteBoardQna(BoardQnA b);
// BoardServiceImpl
// QnA 수정
@Override
public int updateBoardQna(BoardQnA b) {
return bDAO.updateBoardQna(sqlSession, b);
}
// QnA 삭제
@Override
public int deleteBoardQna(BoardQnA b) {
return bDAO.deleteBoardQna(sqlSession, b);
}
// BoardDAO
// QnA 수정
public int updateBoardQna(SqlSessionTemplate sqlSession, BoardQnA b) {
return sqlSession.update("boardMapper.updateBoardQna",b);
}
// QnA 삭제
public int deleteBoardQna(SqlSessionTemplate sqlSession, BoardQnA b) { // delete도 가능. status='N'으로 변경
return sqlSession.update("boardMapper.deleteBoardQna",b);
}
Board-mapper.xml
<!-- QnA 수정 -->
<update id="updateBoardQna">
update qna
set qna_title = #{qnaTitle}, qna_content = #{qnaContent}
where email_id = #{emailId}
</update>
<!-- QnA 삭제 -->
<update id="deleteBoardQna">
update qna
set qna_status = 'N'
where email_id = #{emailId}
</update>
뷰단 삭제 메세지 추가
<script>
function boardQnaDelete(){
if(confirm("정말 삭제하시겠습니까?")){
location.href="boardQnaDeleteForm.bo"
}
}
</script>
/********************************************** QnA : 쓰기 *******************************************************/
//
@RequestMapping("boardQnaWriteView.bo")
public String boardQnaWriteForm() {
return "boardQnaWriteForm";
}
// 게시판 글쓰기
@RequestMapping("boardQnaWriteForm.bo")
public String insertBoard(@ModelAttribute BoardQnA b) {
System.out.println(b);
// b.setQnaTitle("qnaTitle");
// b.setQnaContent("qnaContent"); 세터를 따로 지정해서 값을 주었기 때문에 저 값이 저장된것
// 파람은 단일, 모델어트리뷰트는 복수 저장할 때 사용.
// 모델어트리뷰트는 뷰의 파라미터값과 vo클래스의 필드명(정확히는 세터명)이 같은 것을 매핑함.
// @ModelAttribute BoardQnA b로 받아오면서 뷰의 name속성 파라미터랑 vo 클래스의 필드명(세터명)이랑 같아서
// 자연스럽게 받아올 수 있었지만 세터를 새로 지정하고 거기에 "qnaTitle" 스트링값을 새로 주었기 때문에 저값이 db에 저장된 것
int result = bService.insertBoardQna(b);
System.out.println(result);
if (result > 0) {
return "redirect:boardQna.bo";
} else {
throw new BoardException("문의사항 등록에 실패하였습니다.");
}
}
Service & DAO
//BoardService
int getQnaListCount();
ArrayList<BoardQnA> getBoardQnaList(PageInfo pi);
int insertBoardQna(BoardQnA b);
// BoardServiceImpl
@Override
public int insertBoardQna(BoardQnA b) {
return bDAO.insertBoardQna(sqlSession, b);
}
// BoardDAO
public int insertBoardQna(SqlSessionTemplate sqlSession, BoardQnA b) {
return sqlSession.insert("boardMapper.insertBoardQna",b);
}
Board-mapper.xml
<!-- QnA 조회 : 페이징처리1 - 총게시물 -->
<select id="getQnaListCount" resultType="_int"> <!-- resultType,resultMap 무조건 있어야함. 리절셋하고 나서 뭘로 받을지 정해줘야하기에 -->
select count(*)
from qna
where qna_status = 'Y'
</select>
<!-- QnA 조회 : 페이징처리2 - 필요 게시물 -->
<select id="getBoardQnaList" resultMap="boardQnaResultSet">
select *
from qna
where qna_status = 'Y'
order by qna_no desc
</select>
<resultMap type="BoardQnA" id="boardQnaResultSet"> <!-- type="" 속성 별칭 설정하면 Board도 가능 -->
<id column="QNA_NO" property="qnaNo"/> <!-- PK(기본키) -->
<result column="QNA_TITLE" property="qnaTitle"/> <!-- 일반 컬럼 -->
<result column="QNA_CONTENT" property="qnaContent"/> <!-- 위의 select태그에서 join해서 가져온 멤버테이블의 컬럼 nickname -->
<result column="QNA_CREATE_DATE" property="qnaCreateDate"/>
<result column="QNA_MODIFY_DATE" property="qnaModifyDate"/>
<result column="QNA_STATUS" property="qnaStatus"/>
<result column="QNA_ANS_STATUS" property="qnaAnsStatus"/>
<result column="EMAIL_ID" property="emailId"/>
</resultMap>
<insert id="insertBoardQna">
insert into qna
values(seq_qnaid.nextval, #{qnaTitle}, #{qnaContent}, sysdate, default, default, default, default)
</insert>