티스토리 뷰

반응형

목표: 목록페이지에서 검색 추가
- 옵션: 제목, 작성자
- 검색어
- 옵션상태, 검색어 상태유지

코드:

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 로 검색결과 상태가 유지되면서 정상적으로 검색어들을 출력한다.

반응형
댓글
공지사항