64일차 (1) - 스프링 (게시판 여러가지 기능 추가)

Yohan·2024년 5월 23일
0

코딩기록

목록 보기
95/156
post-custom-banner

1. 검색결과에 따른 게시물 수가 알맞게 뜨지 않을 때

  • 총 게시물 수를 조회하는 count를 검색 타입에 따라 게시물 수가 다르게 뜨게 하기위해서 if로 조건을 건다.
  • BoardMapper.xml
    • count 수정
    <select id="count" resultType="int">
        SELECT COUNT(*)
        FROM tbl_board
        <if test="type == 'title'">
            WHERE title LIKE CONCAT('%', #{keyword}, '%')
        </if>
        <if test="type == 'content'">
            WHERE content LIKE CONCAT('%', #{keyword}, '%')
        </if>
        <if test="type == 'writer'">
            WHERE writer LIKE CONCAT('%', #{keyword}, '%')
        </if>
        <if test="type == 'tc'">
            WHERE title LIKE CONCAT('%', #{keyword}, '%')
            OR content LIKE CONCAT('%', #{keyword}, '%')
        </if>
    </select>

sql에서 if문이 중복될 때 동적 SQL 조건을 분리

  • if문을 따로 빼서 저장
<!--  동적 SQL 조건을 분리  -->
    <sql id="search">
        <if test="type == 'title'">
            WHERE title LIKE CONCAT('%', #{keyword}, '%')
        </if>
        <if test="type == 'content'">
            WHERE content LIKE CONCAT('%', #{keyword}, '%')
        </if>
        <if test="type == 'writer'">
            WHERE writer LIKE CONCAT('%', #{keyword}, '%')
        </if>
        <if test="type == 'tc'">
            WHERE title LIKE CONCAT('%', #{keyword}, '%')
            OR content LIKE CONCAT('%', #{keyword}, '%')
        </if>
    </sql>
  • count를 아래와 같이 짧게 수정 가능
    <select id="count" resultType="int">
        SELECT COUNT(*)
        FROM tbl_board
        <include refid="search" />
    </select>
  • count를 수정했으니 그에 따른 Controller, Service, Mapper에서도 count부분 수정
    • type, keyword를 받아야하므로 파라미터로 search 받음
  • Mapper
  • Controller
  • Service

jsp에서 <<, >>은 가독성이 좋지 않다.

  • << : &lt;&lt;
  • >> : &gt;&gt;
  • 위처럼 대체 가능

2. 검색한 상태에서 다음 페이지나 이전 페이지 등을 눌렀을 때 검색이 유지되지 않고 초기화 되는 문제

  • 예를 들어 검색창에 11이라고 검색하고 다음 페이지로 넘기게되면 검색 필터가 풀리고 초기화되어 다시 원래 board/list가 뜨게된다.
    -> 검색한 상태에서 이전, 다음 페이지 등 페이지들을 눌렀을 때도 유지가 되어야 하므로 url에서 type, keyword를 기억해야 한다.
  • 다시 돌아왔을 때도 위와같은 창이 나와야한다.

list.jsp에서 페이지 부분에 type, keyword를 보내서 url을 기억하게한다.

  • Controller에서 s라는 이름으로 jsp로 보낼 때 @ModelAttribute("s") 라고 파라미터에 입력하게되면 model.addAttribute("s", search) 처럼 보내준다.

3. 검색하고 상세 조회한 이후 목록으로 다시 돌아왔을 때 검색 했던 화면으로 돌아오지 않고 기본 리스트화면으로 초기화 되는 문제

  • 예를 들어 검색창에 11이라고 검색했을 때 뜨는 게시물을 들어갔다가 다시 목록버튼을 누르고 나간다고 했을 때 초기화면 리스트로 돌아오게 되는 문제가 발생한다.

이전 페이지의 주소를 얻어내서 반환하게 한다.

  • detail 요청을 보낼 때 request를 통해서 header의 referer로 접근할 수 있다. referer에는 이전 페이지의 주소가 저장되어있고 이를 jsp로 보내어
  • 목록을 눌렀을 때 검색이 유지된 채 돌아갈 수 있게된다!!

4. 검색 창에 입력했던 값이 유지되게 하는법

  • 위 처럼 입력하고 난 후에 입력값이 유지되게 하려면 검색창 영역의 input에 value값을 줌!
profile
백엔드 개발자
post-custom-banner

0개의 댓글