설문조사형 플랫폼 구현(관리자)
로그인
유효성 검사를 통해 id와 비밀번호 확인 여부를 판단할 수 있는 로그인 기능을 만들었다.
@Override
@RequestMapping(value = "login", method = RequestMethod.POST)
public String login(AdminMemberDTO adminMemberDTO, RedirectAttributes rttr,
HttpServletRequest request)
throws Exception {
System.out.println("login 메서드 진입");
session = request.getSession();
memberDTO = adminService.login(adminMemberDTO);
if (memberDTO == null) {
int result = 0;
rttr.addFlashAttribute("result", result);
return "redirect:loginView";
// 일치하는 memberDTO가 없다면
result를 addFlashAttribute를 이용해 넘겨준다.
->
<c:if test="${result == 0 }">
<div class="login_warn">사용자 ID 또는 비밀번호를 다시 입력해주세요. </div>
</c:if>
를 사용하기 위해 처리하는 것
// addAttribute는 값을 지속적으로 사용해야 할 때,
addFlashAttribute는 일회성으로 사용해야 할 때 사용해야 한다.
}
session.setAttribute("member", memberDTO);
session.setAttribute("isLogOn", true);
return "redirect:adminselect";
}
질문지 게시판 만들기
게시판 페이지에는 게시판 형태의 테이블과 페이징 + 검색 기능이 포함되어 있다.
기본 게시판에 보이는 정보는 정보 상태가 'D'가 아닌 정보들만 나타난다.
D는 delete의 약자이고, 이 프로젝트에서는 등록, 수정, 삭제 여부를 정보 상태로 구분하기 했다.
@Override
@RequestMapping(value = "adminQuesList", method = RequestMethod.GET)
public ModelAndView quesListArticles(AdminBoardDTO boardDTO,
HttpServletRequest request) throws Exception {
ModelAndView mav = new ModelAndView();
String search = request.getParameter("search");
boardDTO.setSearch(search);
// 게시판의 검색 기능을 사용하기 위한 설정
mav.addObject("quesList", adminService.getQuesListPaging(boardDTO));
System.out.println("전달된 데이터 " + boardDTO);
int amount = adminService.getAmount(boardDTO);
BoardPageDTO pageDTO = new BoardPageDTO(boardDTO, amount);
System.out.println(pageDTO);
// 검색 기능을 포함한 전체 게시물 수 확인
mav.addObject("boardPage", pageDTO);
mav.setViewName("ezdiary/admin/adminQuesList");
return mav;
}
질문지 및 답변지 추가기능
생각보다 어려웠던 기능이다. 검색을 해도 유사 예제가 없어 하나하나 생각하면서 만들었다.
특히 DB 테이블에서 제약사항이 있었기 때문에, 처음보는 쿼리문을 활용했었다.
(쿼리문으로 원하는 정보를 빼낼 때 진짜 기분 좋았다)
여튼 때문에 제대로 만든 건지 아직도 의문이 든다.
결과는 원하는대로 나오긴 했다^^
@Override
@RequestMapping(value = "quesWriteInsert", method = RequestMethod.POST)
public ModelAndView quesWriteInsert(AdminAskDTO askDTO,
AdminAnswerDTO answerDTO, HttpServletRequest request)
throws Exception {
ModelAndView mav = new ModelAndView();
// 다음에는 String 타입으로 써야겠다^^
session = request.getSession();
memberDTO = (AdminMemberDTO) session.getAttribute("member");
// 페이지에 정보가 나오진 않지만 DB에 질문지와 답변지 추가한 작성자의 정보를
저장할 수 있도록 했다. 그래서 session에 저장된 member를 가져온다.
String writer = memberDTO.getWriter();
if (writer != null) {
//if문을 활용한 이유는 유효성 검사를 하기 위해서다.
-> 사실 활용하지 않았을 땐 불명확한 이유로 아래의 코드가 작동하지 않았다.
계속 오류가 발생;;; 그래서 if문을 활용해 나누어 줬다. 그러자 원하는대로 성공!
askDTO.setWriter(writer);
adminService.quesEnroll(askDTO);
System.out.println("quesINFO Insert" + askDTO); : 정보를 확인하기 위해서
int parentNO = adminService.lastAskNO(askDTO);
// 답변지에 최근에 등록한 ask_idx 번호를 지정해주기 위해 변수로 담았다.
System.out.println("parentNO : " + parentNO);
if (parentNO != 0) {
answerDTO.setAsk_idx(parentNO);
for (int i = 1; i <= 3; i++) {
askDTO.getAsk_idx();
answerDTO.setAnswer_idx(i);
String anwerWriter = memberDTO.getWriter();
answerDTO.setWriter(anwerWriter);
adminService.answerEnroll(answerDTO);
}
}
}
mav.setViewName("redirect:/adminQuesList");
return mav;
}
질문지 상세페이지
// 질문지 상세페이지
@Override
@RequestMapping(value = "adminQuesView", method = { RequestMethod.GET, RequestMethod.POST })
public ModelAndView quesView(@RequestParam("ask_idx") int ask_idx) throws Exception {
Map<String, Object> articleMap = adminService.getAskNO(ask_idx);
// adminQuesList에서 넘어온 ask_idx를 기준으로 상세페이지를 출력할 수 있도록 한다.
ModelAndView mav = new ModelAndView();
mav.setViewName("ezdiary/admin/adminQuesView");
mav.addObject("articleMap", articleMap);
return mav;
}
질문지 수정하기
// 추가한 질문지 수정페이지의 수정하기
@Override
@RequestMapping(value = "adminQuesMod", method = RequestMethod.POST)
public ModelAndView quesWriteUpdate(AdminAskDTO askDTO,
AdminAnswerDTO answerDTO, HttpServletRequest request,
RedirectAttributes rttr) throws Exception {
ModelAndView mav = new ModelAndView();
String writer = memberDTO.getWriter();
if (writer != null) {
Map<String, Object> articleMap = new HashMap<>();
askDTO.setEditor(writer);
articleMap.put("editor", askDTO.getEditor());
Enumeration enu = request.getParameterNames();
while (enu.hasMoreElements()) {
String name = (String) enu.nextElement();
String value = request.getParameter(name);
articleMap.put(name, value);
// 수정된 질문지의 정보를 가져오기 위해 사용
}
String ask_idx = (String) articleMap.get("ask_idx");
adminService.modifyQues(articleMap);
for (int i = 1; i <= 3; i++) {
askDTO.getAsk_idx();
answerDTO.setAnswer_idx(i);
articleMap.put("answer_idx", answerDTO.getAnswer_idx());
String anwerWriter = memberDTO.getWriter();
answerDTO.setWriter(anwerWriter);
articleMap.put("editor", answerDTO.getWriter());
// writer 정보를 수정 등록 기능이기 때문에 editor에 설정
articleMap.put("answer_cntnt", answerDTO.getAnswer_cntnt());
// 수정된 질문지의 정보를 가져오기 위해 사용
adminService.modifyAnswer(articleMap);
}
mav.setViewName("redirect:/adminQuesView?ask_idx=" + ask_idx);
}
return mav;
}
질문지 및 답변지 삭제하기
삭제하기 기능은 질문지 수정 기능과 비슷하다.
다만 delete가 아닌 update를 활용해 정보 상태만 delete의 약자인 'D'로 나타내는 걸로 표현했다.
// 추가한 질문지 상세페이지 삭제 기능
@Override
@RequestMapping(value = "removeQues", method = { RequestMethod.GET, RequestMethod.POST })
public ModelAndView quesWriteRemove(AdminAskDTO askDTO,
AdminAnswerDTO answerDTO, HttpServletRequest request)
throws Exception {
ModelAndView mav = new ModelAndView();
String writer = memberDTO.getWriter();
if (writer != null) {
Map<String, Object> articleMap = new HashMap<>();
askDTO.setEditor(writer);
articleMap.put("editor", askDTO.getEditor());
Enumeration enu = request.getParameterNames();
while (enu.hasMoreElements()) {
String name = (String) enu.nextElement();
String value = request.getParameter(name);
articleMap.put(name, value);
}
int askNOresult = askDTO.getAsk_idx();
System.out.println(askNOresult);
articleMap.put("ask_idx", askDTO.getAsk_idx());
adminService.removeQues(articleMap);
askDTO.getAsk_idx();
String anwerWriter = memberDTO.getWriter();
answerDTO.setWriter(anwerWriter);
articleMap.put("editor", answerDTO.getWriter());
adminService.removeAnswer(articleMap);
mav.setViewName("redirect:/adminQuesList");
}
return mav;
}
++ 유저 메세지 게시판 코드도 추가 예정 (추가 및 수정 중)
Author And Source
이 문제에 관하여(설문조사형 플랫폼 구현(관리자)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@900522z/설문조사형-플랫폼-구현관리자저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)