./board
라고 하지 않으면 /admin/board
가 아닌 /board
로 가서 url에서 admin 경로가 빠지게 된다.
AdminController.java
@GetMapping("/board")
public String board(@RequestParam(value="page", defaultValue="1") String page,
@RequestParam(value="perPage", defaultValue="1", required=false) String perPage,
@RequestParam(value="search", required=false) String search,
Model model) {
//페이징 + 검색 + 한 화면에 보이는 게시글 수 변경 기능
//페이지 limit 바꿔서 나오는 화면의 수 다르게도 할 수 있게
//전체 글 수 뽑기
int totalRecordCount = adminService.totalRecordCount();
int recordCountPerPage = util.str2Int(perPage) * 10;
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(util.str2Int(page));
paginationInfo.setRecordCountPerPage(recordCountPerPage);
paginationInfo.setPageSize(10);
paginationInfo.setTotalRecordCount(totalRecordCount);
SearchDTO searchDTO = new SearchDTO();
searchDTO.setPageNo(paginationInfo.getFirstRecordIndex());
searchDTO.setSearch(search);
searchDTO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
List<BoardDTO> list = adminService.adminBoardList(searchDTO);
model.addAttribute("list", list);
model.addAttribute("paginationInfo", paginationInfo);
model.addAttribute("page", page);
model.addAttribute("perPage", perPage);
return "admin/board";
}
/admin/board.jsp
<script type="text/javascript">
function linkPage(page) {
location.href="./board?perPage=${perPage}&search=${search}&page="+page;
}
$(function(){
$("#perPage").change(function(){//select 드롭다운을 변경했을 시
location.href="./board?page=${page}&perPage="+$("#perPage").val();
})
});
</script>
<select name="perPage" id="perPage" class="form-control">
<option value="1">10</option>
<option value="2">20</option>
<option value="3">30</option>
<option value="4">40</option>
<option value="5">50</option>
<option value="10">100</option>
</select>
if일때 where 쓴다는 mybatis
board.jsp에서 검색창에 select 태그를 통해 검색 옵션을 추가한다.
board.jsp
function linkPage(page) {
location.href="./board?page="+page+"&perPage=${perPage}&searchOption=${searchOption}&search=${search}";
}
$(function(){
$("#perPage").change(function(){//select 드롭다운을 변경했을 시 (ajax 쓰는게 좋을거같다..)
location.href="./board?page=1&perPage="+$("#perPage").val()+"&searchOption=${searchOption}&search=${search}";
})
$("#searchBtn").click(function(){
location.href="./board?page=1&perPage=${perPage}&searchOption="+$('#searchOption').val()+"&search="+$("#search").val();
});
});
<div class="col-7 input-group">
<select name="searchOption" id="searchOption" class="form-control col-3">
<option value="1" <c:if test="${searchOption eq 1 }">selected="selected"</c:if>>제목 검색</option>
<option value="2" <c:if test="${searchOption eq 2 }">selected="selected"</c:if>>본문 검색</option>
<option value="3" <c:if test="${searchOption eq 3 }">selected="selected"</c:if>>작성자 검색</option>
</select>
<input type="text" name="search" id="search" class="form-control" value="${search }">
<button type="button" class="btn btn-info" id="searchBtn">search</button>
</div>
value="${search }"
<- input에 이렇게 써주면 검색어 유지
controller에서 searchOption 파라미터를 받아서 SearchDTO를 사용해서
검색키워드 search
와 검색옵션 searchOption
을 담아 totalRecordCount()
에 전달
=> 그래야 검색 결과에 대한 페이징이 가능
그 다음 boardList를 출력할 때 searchDTO에 추가로 페이지네이션 정보를 세팅한다.
@GetMapping("/board")
public String board(@RequestParam(value="page", defaultValue="1") String page,
@RequestParam(value="perPage", defaultValue="1", required=false) String perPage,
@RequestParam(value="searchOption", required=false) String searchOption,
@RequestParam(value="search", required=false) String search,
Model model) {
//페이징 + 검색 + 한 화면에 보이는 게시글 수 변경 기능
//페이지 limit 바꿔서 나오는 화면의 수 다르게도 할 수 있게
//전체 글 수에 DTO보내기
SearchDTO searchDTO = new SearchDTO();
searchDTO.setSearch(search);
searchDTO.setSearchOption(searchOption);
//전체 글 수 뽑기
int totalRecordCount = adminService.totalRecordCount(searchDTO);
int recordCountPerPage = util.str2Int(perPage) * 10;
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(util.str2Int(page));
paginationInfo.setRecordCountPerPage(recordCountPerPage);
paginationInfo.setPageSize(10);
paginationInfo.setTotalRecordCount(totalRecordCount);
//페이징 결과 boardList에 보내기
searchDTO.setPageNo(paginationInfo.getFirstRecordIndex());
searchDTO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
List<BoardDTO> list = adminService.adminBoardList(searchDTO);
model.addAttribute("list", list);
model.addAttribute("paginationInfo", paginationInfo);
model.addAttribute("search", search);
model.addAttribute("searchOption", searchOption);
model.addAttribute("page", page);
model.addAttribute("perPage", perPage);
return "admin/board";
}
<select id="totalRecordCount" resultType="int" parameterType="searchDTO">
SELECT COUNT(0)
FROM board b JOIN member m ON b.mno=m.mno
<where>
<if test="searchOption == 1">
b.board_title LIKE CONCAT('%', #{search}, '%')
</if>
<if test="searchOption == 2">
b.board_content LIKE CONCAT('%', #{search}, '%')
</if>
<if test="searchOption == 3">
m.mname LIKE CONCAT('%', #{search}, '%')
</if>
</where>
</select>
<select id="boardList" parameterType="searchDTO" resultType="boardDTO">
SELECT b.board_no, b.mno, b.board_del, m.mname,
(select count(0) from `visitcount` where `visitcount`.`board_no` = `b`.`board_no`) AS board_count,
board_title, board_date, board_ip,
(select count(0) from `comment` where `comment`.`board_no` = `b`.`board_no`) AS `comment`
FROM board b JOIN member m ON b.mno=m.mno
<where>
<if test="searchOption == 1">
b.board_title LIKE CONCAT('%', #{search}, '%')
</if>
<if test="searchOption == 2">
b.board_content LIKE CONCAT('%', #{search}, '%')
</if>
<if test="searchOption == 3">
m.mname LIKE CONCAT('%', #{search}, '%')
</if>
</where>
ORDER BY b.board_no DESC
LIMIT #{pageNo}, #{recordCountPerPage}
</select>
소소하게 작성자 누르면 작성자가 쓴 글 검색한 걸로 해주기
아이콘 누르면 글 삭제하는 거
아이콘에을 줘도 되고,
제이쿼리로 부모의 형제의 value로 글번호를 받아와도 된다.
postDel()
하나의 스크립트 함수를 써서 쿼리문으로 해결하려고 한다...
mybatis selectKey를 써도 되고 if문(되는지 모름) 써봐도 된다고 하심
<update id="postDel" parameterType="int">
Update board SET board_del= CASE WHEN board_del='0' THEN '1'
ELSE '0' END WHERE board_no=#{no}
</update>
새 창으로 detail
DTO 대신 map 쓰기
.do 프로젝트
그러쿠낭