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>
'2023.11.21-2024.05.31' 카테고리의 다른 글
20240305 스프링(관리자 페이지-상세보기 창으로 열기) (0) | 2024.03.05 |
---|---|
20240305 스프링(쿠키-아이디 자동로그인, 세션) (4) | 2024.03.05 |
20240304 스프링(관리자페이지-adminboard, 페이징, 검색, 게시글 수 ) (0) | 2024.03.04 |
20240229 스프링(아이디중복체크(idCheck), 페이징, 검색(search ) (3) | 2024.02.29 |
20240228 스프링(데이터베이스 암호화, 회원가입 -비밀번호 확인) (2) | 2024.02.28 |