본문 바로가기

JAVA/JSP

JSP - 검색기능 추가

반응형

** 검색기능 추가


1. listBoard.jsp 에 틀을 만들어줌

<a href="insertBoard.do">게시물 등록</a>

&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;

&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;

<form action="listBoard.do" method="post">

<input type="hidden" name="searchflag" value="true">

<select name="keyField">

<option value="title">글제목</option>

<option value="content">글내용</option>

<option value="writer">작성자</option>

</select>

&emsp;

<input type="text" name="keyWord">&emsp;

<input type="submit"  value="검색">

</form>


2. ListBoardAction 에 추가하기

수정 전 : request.setAttribute("list", dao.listBoard(pageNumber));

수정 후 : request.setAttribute("list", dao.listBoard(pageNumber, keyField, keyWord));

그리고 오류나는 부분 마우스 올리고 change 눌러줌 ==> 자동 이동함


3. BoardDao 에 추가하기

ArrayList 부분 수정

String sql = "select * from board";


if(keyField != null){

sql2 += " where "+keyField + "like '%"+keyWord+"%'";

sql += " where "+keyField + "like '%"+keyWord+"%'";

}

sql += " order by b_ref desc, b_step";



ArrayList<BoardVo> list = new ArrayList<BoardVo>();


** 여기 까지만 했을 때는 페이지 번호를 누르면 원래대로 돌아간다. 그래서 Session을 이용해 상태유지를 시키도록 하자


4. 검색한 상태를 유지하여 페이징 처리가 가능하도록 한다.

(ListBoardAction - pro()메소드에 추가하기)


// 검색어의 처리

String keyField = null;

String keyWord = null;


if(request.getParameter("keyField") !=null){

keyField = request.getParameter("keyField");

keyWord = request.getParameter("keyWord");


// 검색한 정보를 session에 실어 상태유지 시킨다.

request.getSession().setAttribute("keyField", keyField);

request.getSession().setAttribute("keyWord", keyWord);


}else if(request.getSession().getAttribute("keyField") != null){ // 만약에 session에 keyField의 값이 실렸다면 변수에 저장하여 dao에게 전달해준다.

keyField = (String)request.getSession().getAttribute("keyField");

keyWord = (String)request.getSession().getAttribute("keyWord");

}


5. 모두 검색 가능하도록 하기

1) listBoard.jsp 알맞은 위치에 input button 추가 (하나의 jsp 에 두가지 이상 submit 못옴)

<input type="button" value="모두 검색" onclick="pro()">

2) listBaord.jsp - head에 자바스크립트라는 것을 추가

<script type="text/javascript">

function pro() {

location.href="listBoard.do?all=1"; // all 이라는 변수가 오면 1을 주라는 것(내맘대로 변수 정해줌)

}

</script>

3) ListBoardAction 첫줄에 정의

형태 : A 에는 아까 내용 줌

// 모두 검색인가 판별

if(request.getParameter("all") != null){

request.getSession().setAttribute("keyField", null);

request.getSession().setAttribute("keyWord", null);

}else{

A

}

정의 : 

// 모두 검색인가 판별

if(request.getParameter("all") != null){

request.getSession().setAttribute("keyField", null);

request.getSession().setAttribute("keyWord", null);

}else{


if(request.getParameter("keyField") !=null){

keyField = request.getParameter("keyField");

keyWord = request.getParameter("keyWord");


// 검색한 정보를 session에 실어 상태유지 시킨다.

request.getSession().setAttribute("keyField", keyField);

request.getSession().setAttribute("keyWord", keyWord);


}else if(request.getSession().getAttribute("keyField") != null){ // 만약에 session에 keyField의 값이 실렸다면 변수에 저장하여 dao에게 전달해준다.

keyField = (String)request.getSession().getAttribute("keyField");

keyWord = (String)request.getSession().getAttribute("keyWord");

}

}


6. 정렬하기

: 각 칼럼 이름에 링크를 걸어 칼럼 기준으로 정렬하도록 함(이때 ref를 기준으로 뽑아오는 것은 무시합니다.

단, 검색후 정렬을 누르면 검색한 상태를 유지한 상태에서 정렬이 되도록 합니다.


1) ListBoard.jsp 에 있는 칼럼명에 링크 걸기

<tr>

<td><a href="listBoard.do?sort=no">글번호</a></td>

<td><a href="listBoard.do?sort=title">글제목</a></td>

<td><a href="listBoard.do?sort=fsize">첨부파일</a></td>

<td><a href="listBoard.do?sort=Writer">작성자</a></td>

<td><a href="listBoard.do?sort=regdate">날짜</a></td>

<td><a href="listBoard.do?sort=hit">조회수</a></td>

</tr>


2) ListBoardAction 에 맨 위에 정의 해줌

// 정렬의 처리

String sort = null;

if(request.getParameter("sort") != null){

sort = request.getParameter("sort");

}

그리고

이부분에 sort 추가 및 마우스 올려서 BoardDao로 가기

request.setAttribute("list", dao.listBoard(pageNumber, keyField, keyWord, sort));


3) BoardDao 에 ArrayList 부분 정의하러 가기

이부분을

sql += " order by b_ref desc, b_step";

이렇게 바꾸기

if(sort != null){

sql += " order by " + sort;

}else{

sql += " order by b_ref desc, b_step";

}


난 여기까지 했음-----------------------------------------------------------------

반응형