지난 시간에는 게시판에 CRUD기능 구현을 했었습니다. Insert, Select, Update, Delete로 게시판을 등록하고, 읽고, 수정하고, 삭제하는 기능 구현을 해봤었는데, 오늘은 카테고리 3가지를 설정하고 각 카테고리 별로 게시판 내용이 바뀌고, 잘못된 접근을 막아서 에러페이지가 안뜨도록 잡는 것도 해볼 예정입니다~
1. 우선 각 게시판으로 접근할 수 있도록 링크를 걸어줍니다.
<a href="./board?sb_cate=1">자유게시판</a> |
<a href="./board?sb_cate=2">공지사항</a> |
<a href="./board?sb_cate=3">문의게시판</a>
<!-- 이런식으로 나오겠죠? -->
자유게시판 | 공지사항 | 문의게시판
파라미터 값을 갖고 이동하는 것을 볼 수 있습니다.
2. Controller 작업을 해줍니다.
@Autowired
private Util util;
@RequestMapping(value = "/board", method = RequestMethod.GET)
public ModelAndView board(HttpServletRequest request) {
int sb_cate = util.str2Int2(request.getParameter("sb_cate"));
ModelAndView mv = new ModelAndView("board");
List<TestDTO> boardList = testService.boardList(sb_cate);
mv.addObject("list", boardList);
mv.addObject("sb_cate",sb_cate);
return mv;
}
(Util은 Integer.parseInt를 하기 위한 컴포넌트입니다.)
위의 내용 대로라면 파라미터를 잡아 Service로 던져서 값을 받아 저장해둔 "list"라는 변수와, 받은 파라미터값 그대로 다시 돌려주기 위한 "sb_cate"라는 변수가 생성되었음을 볼 수 있습니다.
3. Service 작업을 해줍니다.
public List<TestDTO> boardList(int sb_cate){
return testDAO.boardList(sb_cate);
}
4. DAO 작업을 해줍니다.
public List<TestDTO> boardList(int sb_cate){
return sqlSession.selectList("test.boardList", sb_cate);
}
5. Mapper 작업을 해줍니다.
<select id="boardList" resultType="TestDTO">
SELECT * FROM sbboardview WHERE sb_cate=#{sb_cate}
</select>
받아온 파라미터 값을 갖고 view에서 해당되는 카테고리의 게시글 리스트를 뽑아냅니다.
이런식으로 각 게시판 카테고리 별로 리스트가 추출되는 것을 볼 수 있습니다.
하지만 여기서 문제점이 발생합니다. 파라미터값을 꼭 받도록 설정되어 있기 때문에 이 상태에서 주소창에 파라미터값을 다 지운다거나, 없는 파라미터 값을 입력하면 에러페이지가 뜰 것입니다.
그리고 제가 지금 어느 카테고리의 게시판에 있는지 알 수 가 없습니다.
이 두가지를 해결해보겠습니다.
6. Controller로 이동합니다.
@Autowired
private Util util;
@RequestMapping(value = "/board", method = RequestMethod.GET)
public ModelAndView board(HttpServletRequest request) {
//int sb_cate = util.str2Int2(request.getParameter("sb_cate"));
//ModelAndView mv = new ModelAndView("board");
//List<TestDTO> boardList = testService.boardList(sb_cate);
//mv.addObject("list", boardList);
//mv.addObject("sb_cate",sb_cate);
//return mv;
int sb_cate = 1;
if(request.getParameter("sb_cate") != null || util.str2Int(request.getParameter("sb_cate"))) {
sb_cate = util.str2Int2(request.getParameter("sb_cate"));
}
ModelAndView mv = new ModelAndView("board");//jsp
List<TestDTO> boardList = testService.boardList(sb_cate);
String category = testService.getCategory(sb_cate);
mv.addObject("category", category);
mv.addObject("list", boardList);
mv.addObject("sb_cate",sb_cate);
return mv;
}
주석 처리된 부분은 맨 처음 설정한 부분이고, 아래 쪽은 추가된 설정을 포함한 버전입니다.
달라진 점이 눈에 들어 오시나요?
파라미터 값이 NULL인지, 또는 파라미터 값을 parseInt 했을 때 변환되는 값이 있는지 없는지(참고로 util.str2Int는 아래와 같습니다.) 확인하여, True라면 파라미터 값을 갖고 Service로 날라가도록 하였습니다. 만약에 false라면 위에 int sb_cate = 1; 이라고 변수를 설정했기 떄문에 1이라는 값을 갖고 Service로 넘어가겠죠?
try {
Integer.parseInt(str);
return true;
} catch (Exception e) {
return false;
}
String category = testService.getCategory(sb_cate);
mv.addObject("category", category); 이 부분이 이제 게시판에서 카테고리 명을 보여줄 친구입니다.
7. Mapper에 카테고리 이름을 갖고 올 수 있는 sql문만 생성하면 끝납니다.
<select id="getCategory" resultType="String">
SELECT sc_category from scategory WHERE sc_no=#{sb_cate}
</select>
짜잔~
Ajax를 사용하면 페이지 전환 없이 내용이 바뀌겠죠? ㅎㅎ 그 부분은 차차 해보도록 하겠습니다.
해당 게시판에서 글쓰기 기능 사용시 해당 카테고리 값을 갖고 날라갈 수 있도록 하는 기능은 jQuery에서 다뤘습니다~
'BackEnd > Spring' 카테고리의 다른 글
Spring 회원가입양식 만들기(Ajax를 활용한 비동기 방식) (0) | 2021.09.02 |
---|---|
스프링 6일차(카테고리 자동 생성) (0) | 2021.08.30 |
스프링 4일차(CRUD_입력, 수정, 삭제, 조회) (0) | 2021.08.26 |
스프링 3일차(DB연결) (0) | 2021.08.25 |
스프링 2일차(AOP) (0) | 2021.08.24 |