티스토리 뷰
반응형
목표: 목록페이지에서 검색 추가
- 옵션: 제목, 작성자
- 검색어
- 옵션상태, 검색어 상태유지
코드:
NoticeListController.java 전체 코드
package com.newlecture.web.controller;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.newlecture.web.entity.Notice;
import com.newlecture.web.service.NoticeService;
@WebServlet("/notice/list")
public class NoticeListController extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*사용자가 어떤 검색기준으로 전달할 것인지*/
String field_ = request.getParameter("f");
/*사용자가 검색을 위한 검색어를 입력*/
String query_ = request.getParameter("q");
/* 사용자가 전달하는 값이 null이 아닌경우에 대한 조건문*/
String field = "title"; //전달되지 않을때 기본값
if(field_ != null)
field = field_;
String query = ""; //전달되지 않을때 기본값
if(query_ != null)
query = query_;
NoticeService service = new NoticeService();
/*3가지의 오버로드 함수중에서 field, query, page를 선택*/
//field는 옵션, null이 올 경우가 있기 때문에 조건문을 설정해야한다.
List<Notice> list = service.getNoticeList(field, query, 1); // ctr+shift+O로 패키지 추가
request.setAttribute("list", list);
//forward -> list.jsp를 요청하면서 현재 사용중인 request 저장소와 출력도구를 공유한다.
request.getRequestDispatcher("/WEB-INF/view/notice/list.jsp").forward(request, response);
}
}
1. 옵션: 제목, 작성자
검색어
- list.jsp
f는 option의 value의 값을 가진다. q는 input의 value값을 가진다.
//사용자가 어떤 검색기준으로 전달할 것인지, 임시변수에 저장
String field_ = request.getParameter("f"); //
//사용자가 검색을 위한 검색어를 입력, 임시변수에 저장
String query_ = request.getParameter("q");
예) 옵션:제목 검색어:2 검색했을때, f=title&q=2 값을 전달한다.
즉, 위의 f, q를 controller에서 받아서 임시변수에 저장한다.
list객체에 3가지의 오버로드 함수중에서 field, query, page를 선택
/* 사용자가 전달하는 값이 null이 아닌경우에 대한 조건문*/
String field = "title"; //전달되지 않으면 기본값
if(field_ != null)
field = field_;
String query = ""; //전달되지 않으면 기본값
if(query_ != null)
query = query_;
NoticeService service = new NoticeService();
/*3가지의 오버로드 함수중에서 field, query, page를 선택*/
//field는 옵션, null이 올 경우가 있기 때문에 조건문을 설정해야한다.
List<Notice> list = service.getNoticeList(field, query, 1);
field, query, page에서 page는 임시로 1로 설정
위의 조건문을 통해서 옵션이 설정되지 않았을 경우의 기본값을 만들어둔다.
2. 옵션상태, 검색어 상태유지
현재 검색어을 누르면 옵션의 상태와 검색어 내용이 모두 사라진다.
<select name="f">
<!-- EL문과 삼항연산자를 이용해서 title일경우에는 선택, 아닐경우에는 빈문자열을 반환 -->
<option ${(param.f == "title")?"selected":"" } value="title">제목</option>
<!-- EL문과 삼항연산자를 이용해서 writer_id일경우에는 선택, 아닐경우에는 빈문자열을 반환 -->
<!-- writerId라고 하면 데이터베이스내의 컬럼명에 맞지 않아서 오류가 발생한다. writer_id라는 컬럼명으로 맞춰준다. -->
<option ${(param.f == "writer_id")?"selected":"" } value="writer_id">작성자</option>
</select>
<label class="hidden">검색어</label>
<input type="text" name="q" value="${param.q}"/> <!-- url을 통해 전달: list?f=title&q=a -->
<!-- 쿼리스트링으로 있는 q라고 있는것을 출력해주라. -->
<input class="btn btn-search" type="submit" value="검색" />
옵션 및 검색어 상태유지를 위한 코드
옵션: EL문과 내부저장소에서 param함수, 삼항연산자를 이용해서 옵션의 상태를 유지할 수있도록 한다.
검색어:EL문과 내부저장소에서 param함수를 이용해 q를 출력해 상태를 유지할 수있도록 한다.
옵션: 제목, 검색어: Oracle 로 검색결과 상태가 유지되면서 정상적으로 검색어들을 출력한다.
반응형
'Servlet JSP' 카테고리의 다른 글
서블릿/JSP 강의/강좌 76 - NoticeService 클래스 완성하기 (0) | 2021.05.28 |
---|---|
서블릿/JSP 강의/강좌 75 - getNoticeList의 JDBC 코드 구현하기 (0) | 2021.05.20 |
getPrevNotice 메소드의 SQL 쿼리 작성하기 (0) | 2021.05.19 |
getNextNotice 메소드의 SQL 쿼리 작성하기 (0) | 2021.05.19 |
getNoticeList 메소드의 SQL 쿼리 작성하기 (0) | 2021.05.19 |
댓글
공지사항