JSP 카테고리 게시판 - JSP kategoli gesipan

매번 새로운 카테고리를 생성할 때마다 일일이 수작업으로 만든다면 엄청 번거롭지만 이렇게 관리자 페이지에서 생성과 수정을 하고 그것이 따로 작업하지 않더라도 자동으로 페이지에 생성이 된다면 엄청 편하겠죠? ㅎㅎ

 

 

1. AdminController

	@GetMapping(value = "/admin/category")
	public ModelAndView category(HttpServletRequest request) {
		ModelAndView mv = new ModelAndView("/admin/category");
		List<HashMap<String, Object>> category = adminService.getCategory();
		mv.addObject("category", category);
        
		return mv;
	}//관리자 페이지 진입 시
	
	@PostMapping(value="/admin/category")
	public String categoryInsert(HttpServletRequest request){
		String categoryName = request.getParameter("categoryName");
		adminService.categoryInsert(categoryName);
		
		return "redirect:/admin/category";//get다시 호출
	}// 카테고리 생성 시

 

 

2. AdminService

	public List<HashMap<String, Object>> getCategory() {
		return adminDAO.getCategory();
	}

	public int categoryInsert(String categoryName) {
		return adminDAO.categoryInsert(categoryName);
	}

 

 

3. AdminDAO

	public List<HashMap<String, Object>> getCategory() {
		return sqlSession.selectList("admin.getCategory");
	}

	public int categoryInsert(String categoryName) {
		return sqlSession.insert("admin.categoryInsert", categoryName);
	}

 

 

4. AdminMapper

	<select id="getCategory" resultType="hashMap">
		SELECT * FROM scategory
	</select>
	
	<insert id="categoryInsert">
		INSERT INTO scategory (sc_category) VALUES (#{categoryName})
	</insert>

여기까지가 관리자 페이지에서 카테고리를 생성하기 위한 절차입니다.

수정 기능은 등록과 비슷함으로 생략하겠습니다(혹시라도 도움이 필요하면 댓글 남겨주십쇼! ㅎㅎ 아는 선에서 도움 드리겠습니다😣)

 

 

이제부터 게시판과 글쓰기 페이지에 자동으로 추가 될 수 있도록 설정하겠습니다.

여기서부터는 지난 차시에서 했던 내용이 많이 포함되어 있어 생략된 부분이 많으므로

쉽게 이해가 되지 않으시다면 이전 글을 보고 오시면 될 것 같습니다.

5.  TestController(게시판과 글쓰기를 담당하는 컨트롤러입니다.)

		String category = (String)categoryList.get(0).get("sc_category");
		for (HashMap<String, Object> list : categoryList) {
			if(((int)list.get("sc_no")) == sb_cate) {
				category = (String) list.get("sc_category");
			}
		}
        
        mv.addObject("category", category);

기존에는 파라미터 값을 받아 해당 카테고리 번호에 맞는 카테고리 이름을 뽑기 위해

String category = testService.getCategory(sb_cate);라고 했었지만 이제는 모든 카테고리를 갖고 와야되기 때문에 이부분을 수정해줬습니다.

 

 

6. TestService

	public List<HashMap<String, Object>> categoryList() {
		return testDAO.categoryList();
	}

 

 

7. TestDAO

	public List<HashMap<String, Object>> categoryList() {
		return sqlSession.selectList("test.categoryList");
	}

 

 

8. testMapper

	<select id="categoryList" resultType="hashMap">
		SELECT * FROM scategory
	</select>

 

 

9. Board.jsp

TestController에서 categoryList를 return해줬기 때문에

		<c:forEach items="${categoryList }" var="cl">
			<a href="./board?sb_cate=${cl.sc_no }">${cl.sc_category }</a> |			
		</c:forEach>

이렇게 해주면 끝!

 

 

이제 write페이지로 넘어가기전 컨트롤러에서 categoryList를 잡아주는 설정만 하면 끝난다.

10. TestController(write)

	@GetMapping("/write")
	public ModelAndView write(@RequestParam("sb_cate") int sb_cate) {
		ModelAndView mv = new ModelAndView("write");
		List<HashMap<String, Object>> categoryList = testService.categoryList();
		mv.addObject("categoryList", categoryList);
		return mv;
	}

그리고 write.jsp는 이런식으로 해주면 된다.

	public List<HashMap<String, Object>> getCategory() {
		return adminDAO.getCategory();
	}

	public int categoryInsert(String categoryName) {
		return adminDAO.categoryInsert(categoryName);
	}
0

select부분을 이렇게 해주면 된다.

 

++추가적으로 글쓰기 페이지에 보면 게시판으로 다시 돌아가는 버튼이 두가지가 있는데 하나는 select에서 선택된 카테고리 게시판으로 이동하는 기능이고, 다른 하나는 글쓰기 페이지로 넘어오기 직전 게시판으로 이동하는 기능이다.

	public List<HashMap<String, Object>> getCategory() {
		return adminDAO.getCategory();
	}

	public int categoryInsert(String categoryName) {
		return adminDAO.categoryInsert(categoryName);
	}
1

그냥 만들고 싶어서 만들어봤다 ㅎㅎ (https://unknown-coding.tistory.com/8 [Ramg's Programming]" href="http://%20 출처: https://unknown-coding.tistory.com/8 [Ramg's Programming]" target="_blank">글쓰기 페이지 제이쿼리 기능 보러가기)

확장성을 고려한다면 테이블을 많이 생성하고, 유지보수 시 에는 불편할 수 있지만

테이블의 UI도 비슷하고, 관리도 하나로 되기 때문에 CATEGORY인 컬럼을 추가해서 구분해주는 것이 맞다고 생각했다.

먼저 추가해줘야 되는 부분을 생각했고, 자유 게시판으로 테스트를 했다.

일단 게시판별로 보여주는 화면이 다르기 때문에 각각의 이름을 붙여준다.

그리고 처음에는 forEach문 바깥쪽에 category를 비교하려고 했는데, 이 방식으로 하면 동작하지 않는다.

그래서 각 게시판 별로문을 추가해줘서 카테고리의 명칭에 맞는 게시글 들을 보여줄 수 있게 만들었다.

            
                
                
                    
                    
                        
                            
                            [  ]
                        
                    
                    
                    
                    
                
                
            

이렇게 해서 td에 리스트를 보이게 했고,

그 다음 페이징 처리가 또 문제였다.

페이징 처리도 원래 기존 board-list에 되어 있었기 때문에 컨트롤러에서 수정이 필요했다.

getTotal을 통해서 전체 게시글을 보여주는데 자유 게시판은 전체를 보여주는게 아니라 category 컬럼이 free인것만 보여줘야 한다.

일단 먼저 sql문을 만들고

	
		select count(*) from tbl_board
		where
		
		
		
		category like '%free%'
	

그 다음 매퍼에 값을 추가해줘서 이 매퍼값을 쓸 수 있게 해준다.

그리고 로직을 추가해주면 자유게시판의 값만 조회가 가능하게 했다.

그러면 작성할때 어느 게시판인지 받는 

select 태그를 추가하고 value값에 그에 맞는 게시판을 추가해준다.