본문 바로가기

2023.11.21-2024.05.31

20240304 스프링(페이징, 검색, 게시글 수,searchTitle,postDel)

board.jsp >선택 토글 추가

<select name="searchTitle" id="searchTitle" class="form-control col-3">
<option value="1">제목 검색</option>
<option value="2">본문 검색</option>
<option value="3">작성자 검색</option>
</select

 

 

 

 

board.jsp > perpage 에 selected=”selected” 랑 조건문 추가

 

<select name="perPage" id="perPage" class="form-control col-2">
	<option value="1" <c:if test="${perPage eq 1 }">selected="selected"</c:if>>10개씩 보기</option>
	<option value="2" <c:if test="${perPage eq 2 }">selected="selected"</c:if>>20개씩 보기</option>
	<option value="3" <c:if test="${perPage eq 3 }">selected="selected"</c:if>>30개씩 보기</option>
	<option value="4" <c:if test="${perPage eq 4 }">selected="selected"</c:if>>40개씩 보기</option>
	<option value="5" <c:if test="${perPage eq 5 }">selected="selected"</c:if>>50개씩 보기</option>
	<option value="10" <c:if test="${perPage eq 10 }">selected="selected"</c:if>>100개씩 보기</option>
</select>

 

 

 

 

스크립트에 추가 >&searchTitle="+$('#searchTitle').val()

    	$('#searchBtn').click(function(){
    		location.href="./board?pageNo=1&perPage=${perPage}
            &searchTitle="+$('#searchTitle').val()+"&search="+$('#search').val();

 

 

 

 

 

AdminController > @RequestParam(name = "searchTitle", required = false) String searchTitle,

	@GetMapping("/board")
	public String board(@RequestParam(name = "pageNo", defaultValue = "1") String pageNo,
			@RequestParam(name = "perPage", defaultValue = "1", required = false) String perPage,
			@RequestParam(name = "searchTitle", required = false) String searchTitle,
			@RequestParam(name = "search", required = false) String search, Model model) {
            
		// 페이징 + 검색 + 한 화면에 보이는 게시글 수 변경
        

		// 전체 글 수 뽑기
		int totalRecordCount = adminService.totalRecordCount(searchDTO);

		// 전자정부 페이징 pagination
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(util.str2Int(pageNo)); // 현재 페이지 번호
		paginationInfo.setRecordCountPerPage(util.str2Int(perPage) * 10); // 10 20 30 40 50 100
		paginationInfo.setPageSize(10); // 페이징 리스트의 사이즈
		paginationInfo.setTotalRecordCount(totalRecordCount);// 전체 게시물 건 수


		SearchDTO searchDTO = new SearchDTO();
		searchDTO.setPageNo(paginationInfo.getFirstRecordIndex());
		searchDTO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		searchDTO.setSearchTitle(searchTitle);
		searchDTO.setSearch(search);

		List<BoardDTO> list = adminService.boardList(searchDTO);
		model.addAttribute("list", list);
		model.addAttribute("paginationInfo", paginationInfo);
		model.addAttribute("pageNo", pageNo);
		model.addAttribute("perPage", perPage);
		model.addAttribute("search", search);

		return "admin/board";
	}

 

 

SearchDTO > search 추가

package org.mask.dto;

import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
public class SearchDTO {
	private int pageNo, recordCountPerPage; 
	private String searchTitle, search; {	
	}
}

>전부터 있던 SearchDTO 에 완성본이 그냥 들어간 것 같다

 

 

 

admin-mapper> 서치타이틀에 따른 조건문 추가, 조인해서 mname 까지 추가해주기

	<select id="boardList" parameterType="searchDTO"
		resultType="boardDTO">
		SELECT b.board_no, b.board_title, m.mname, m.mid ,b.board_date,
		b.board_ip, b.board_del
		FROM board b JOIN member m ON b.mno=m.mno
		<where>
			<if test="searchTitle == 1">
				b.board_title LIKE CONCAT('%', #{search}, '%')
			</if>
			<if test="searchTitle == 2">
				b.board_content LIKE CONCAT('%', #{search}, '%')
			</if>

			<if test="searchTitle == 3">
				m.mname LIKE CONCAT('%', #{search}, '%')
			</if>
		</where>
		ORDER BY board_no DESC
		LIMIT #{pageNo}, #{recordCountPerPage};
	</select>

 

 

 

 

AdminController

> totalRecordCount에서 setSearchTitle 넣어주기 위해 searchDTO 부분 모두 페이징 위로 옮기기

>페이징 때문에 에러남, 에러나는 2개만 페이징 아래로 내리기

>int totalRecordCount = adminService.totalRecordCount(searchDTO); >> search가 아니고 searchDTO임

	@GetMapping("/board")
	public String board(@RequestParam(name = "pageNo", defaultValue = "1") String pageNo,
			@RequestParam(name = "perPage", defaultValue = "1", required = false) String perPage,
			@RequestParam(name = "searchTitle", required = false) String searchTitle,
			@RequestParam(name = "search", required = false) String search, Model model) {

		// 페이징 + 검색 + 한 화면에 보이는 게시글 수 변경

		// 전체 글 수에도 DTO 보내기
		SearchDTO searchDTO = new SearchDTO();
		searchDTO.setSearchTitle(searchTitle);
		searchDTO.setSearch(search);

		// 전체 글 수 뽑기
		int totalRecordCount = adminService.totalRecordCount(searchDTO);

		// 전자정부 페이징 pagination
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(util.str2Int(pageNo)); // 현재 페이지 번호
		paginationInfo.setRecordCountPerPage(util.str2Int(perPage) * 10); // 10 20 30 40 50 100
		paginationInfo.setPageSize(10); // 페이징 리스트의 사이즈
		paginationInfo.setTotalRecordCount(totalRecordCount);// 전체 게시물 건 수

		// 검색에서 사용할 값 추가
		searchDTO.setPageNo(paginationInfo.getFirstRecordIndex());
		searchDTO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());

		List<BoardDTO> list = adminService.boardList(searchDTO);
		model.addAttribute("list", list);
		model.addAttribute("paginationInfo", paginationInfo);
		model.addAttribute("pageNo", pageNo);
		model.addAttribute("perPage", perPage);
		model.addAttribute("search", search);

		return "admin/board";
	}

 

 

 

서비스, 서비스impl 도 모두 searchDTO 로 수정

DAO 도 searchDTO 로 수정

매퍼도 parametertType 이랑 sql문 수정 >>위에서 이미 다 수정한 내용 올렸음

다시한번 내용 기재

 

AdminServiceImpl

	@Override
	public List<BoardDTO> boardList(SearchDTO searchDTO) {
		return adminDAO.boardList(searchDTO);
	}

	@Override
	public int totalRecordCount(SearchDTO searchDTO) {
		return adminDAO.totalRecordCount(searchDTO);
	}

 

 

 

AdminService

	List<BoardDTO> boardList(SearchDTO searchDTO);

	int totalRecordCount(SearchDTO searchDTO);

 

 

 

AdminDAO

	public List<BoardDTO> boardList(SearchDTO searchDTO) {
		return sqlSession.selectList("admin.boardList",searchDTO);
	}

	public int totalRecordCount(SearchDTO searchDTO) {
		return sqlSession.selectOne("admin.totalRecordCount",searchDTO);
	}

 

 

 

 

admin-mapper

	<select id="boardList" parameterType="searchDTO"
		resultType="boardDTO">
		SELECT b.board_no, b.board_title, m.mname, m.mid ,b.board_date,
		b.board_ip, b.board_del
		FROM board b JOIN member m ON b.mno=m.mno
		<where>
			<if test="searchTitle == 1">
				b.board_title LIKE CONCAT('%', #{search}, '%')
			</if>
			<if test="searchTitle == 2">
				b.board_content LIKE CONCAT('%', #{search}, '%')
			</if>

			<if test="searchTitle == 3">
				m.mname LIKE CONCAT('%', #{search}, '%')
			</if>
		</where>
		ORDER BY board_no DESC
		LIMIT #{pageNo}, #{recordCountPerPage};
	</select>

	<select id="totalRecordCount" parameterType="String"
		resultType="Integer">
		SELECT COUNT(*)
		FROM board b JOIN member m ON b.mno=m.mno
		<where>
			<if test="searchTitle == 1">
				b.board_title LIKE CONCAT('%', #{search}, '%')
			</if>
			<if test="searchTitle == 2">
				b.board_content LIKE CONCAT('%', #{search}, '%')
			</if>

			<if test="searchTitle == 3">
				m.mname LIKE CONCAT('%', #{search}, '%')
			</if>
		</where>
	</select>

 

 

 

 

board.jsp

> 리셋 기능 넣기

<button type="button" id="reset" class="btn btn-success col-4"><i class="fa fa-refresh" aria-hidden="true"></i> 초기화</button>

 

 

 

>스크립트에 추가

$("#reset").click(function(){
location.href="./board";
});

 

 

 

> <게시글에서 이름 검색하면 작성자가 작성한 글만 보이게 하기>

<td>mname</td> 아래처럼 수정 

<td>
<a href="./board?searchTitle=3&search=${row.mname }">${row.mname }</a>
</td>

 

 

> <del 클릭하면 0이랑 1바뀌게 만들기>아이콘 추가

<td>
<i class="fa fa-eye" aria-hidden="true"></i>
<i class="fa fa-eye-slash" aria-hidden="true"></i>
${row.board_del }</td>

 

 

 

 

>조건문 넣어주기

<td>
<c:choose>
<c:when test="${row.board_del eq 1}">
<i class="fa fa-eye" aria-hidden="true"></i>
</c:when>
<c:otherwise>
<i class="fa fa-eye-slash" aria-hidden="true"></i>
</c:otherwise>
</c:choose>
</td>

 

 

> 눌렀을 때 값 바뀌도록 코드 수정

 <i class="fa fa-eye" aria-hidden="true" onclick="postDel(${row.board_no})"></i>

 

 

 

>스크립트에 위 코드 추가 

function postDel(no) { location.href="./postDel?no="+no; }

 

 

 

AdminController>postDel

	@GetMapping("/postDel")
	public String postDel(@RequestParam("no") int no) {
		int result = adminService.postDel(no);
		return "redirect:/admin/board";
	}

 

 

 

AdminServiceImpl>postDel

	@Override
	public int postDel(int no) {
		return adminDAO.postDel(no);
	}

 

 

AdminService> postDel

	int postDel(int no);

 

 

 

AdminDAO > postDel

	public int postDel(int no) {
		return sqlSession.update("admin.postDel",no);
	}

 

 

 

 

board-mapper > postDel

> postDel 로 넣고 sql만 수정해서 눌렀을 때 떴다 감았다 반복될 수 있게 만들자

	<update id="postDel" parameterType="Integer">
		Update board SET board_del= CASE WHEN board_del='0' THEN '1'
		ELSE '0' END WHERE board_no=#{no}
	</update>

 

 

 

board.jsp

> 반대로 안보이는거 눌렀을 때 보이게 만들기

<c:choose>
	<c:when test="${row.board_del eq 1 }">
		<i class="fa fa-eye" aria-hidden="true" onclick="postDel(${row.board_no })"></i>
	</c:when>
	<c:otherwise>
		<i class="fa fa-eye-slash" aria-hidden="true" onclick="postDel(${row.board_no })"></i>
	</c:otherwise>
</c:choose>