[검색실습]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib tagdir="/WEB-INF/tags" prefix="kim" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>메인페이지</title>
</head>
<body>
<kim:header />
<hr>
<form action="main.do">
<select name="searchCondition">
<c:forEach var="v" items="${searchMap}">
<option value="${v.value}">${v.key}</option>
</c:forEach>
</select>
<input type="text" name="searchContent" placeholder="검색어를 입력하세요.">
<input type="submit" value="검색">
</form>
<br>
<table border="1">
<tr>
<th>글 번호</th><th>글 제목</th><th>작성자</th><th>조회수</th>
</tr>
<c:forEach var="v" items="${datas}">
<tr>
<td>${v.bid}</td><td>${v.title}</td><td>${v.writer}</td><td>${v.cnt}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
17번부터 24번까지 검색어 검색
똑같이 이 메인 페이지로 와야 하기때문에 form main.do
제목을 선택하면 title
작성자 선택하면 writer
검색어 입력 searchcondition
이부분에 대해 받아줄 BoardVO가 미리 getter setter로 멤버변수화 되어있었어야 합니다
old 코드를 바꿔야 하는 경우
현업 선배들이 물어봤던거
VO에 tmp멤버변수가 없을때,
멤버변수로 없는 애들도 받을 수 있는 어노테이션이 있음
package com.spring.view.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import com.spring.biz.board.BoardDAO;
import com.spring.biz.board.BoardVO;
import com.spring.biz.member.MemberVO;
@Controller
public class MainController {
@ModelAttribute("searchMap")
public Map<String,String> searchMap(){
Map<String,String> map=new HashMap<String,String>();
map.put("제목", "TITLE");
map.put("작성자", "WRITER");
return map;
}
@RequestMapping(value="/main.do")
public String main(@ModelAttribute("mem")MemberVO mVO, BoardVO bVO, BoardDAO bDAO, Model model) {
System.out.println("searchCondition: "+bVO.getSearchCondition());
System.out.println("searchContent: "+bVO.getSearchContent());
mVO.setMid("test");
mVO.setMpw("1234");
System.out.println("MainController 로그");
// model.addAttribute("mem", mVO);
model.addAttribute("datas", bDAO.selectAll(bVO));
return "main.jsp";
}
}
value="/main.do"로 인해 15번라인으로 오게 됨
Command객체에 없는 값을 쓰려면
@RequestParam(value="searchCondition)String searchCondition 하면됨
@RequestParam 어노테이션은 다음과 같다 == String searchCondition=request.getParameter("searchCondition");
이렇게 작성을 하려면 request라는 무거운 not pojo객체가 필요하니까
↓
대신에 어노테이션으로 RequestParam을 쓴다
@RequestMapping(value="/main.do")
@RequestParam(value="searchCondition",defaultValue="TITLE",required=false)String searchCondition, @RequestParam(value="searchContent",defaultValue="",required=false)String searchContent
System.out.println("searchCondition: "+searchCondition);
System.out.println("searchCondition: "+searchContent);
어떤 검색어로 뭘 보고 싶어 하는지
VO에 tmp를 넣어놓는경우가 많으며 이렇게 쓰는게 무조건 좋은건 아니다
신입일때 이걸 보여주고 고쳐봐라 할것임
원래는 VO로 받음
MainController에서 BoardVO bVO추가
System.out.println("searchCondition: "+bVO.getSearchCondition());
System.out.println("searchCondition: "+bVO.getSearchContent());
MainController
model.addAttribute("datas", bDAO.selectAll(bVO));
selectAll이 null이 아니라 bVO를 받을수있게 변경
boardDAO에서 selectAll
RequestParam을 쓰면 디폴트값 설정 가능
command객체로는 그게 안됨
그래서 첫 진입이 null이 나옴
VO에 tmp멤버변수를 생성하는것이 보편적임!
===================================
[ @ModelAttribute("이름") ]
VIEW에서 사용할 데이터를 세팅하려는 목적으로 활용하는 @
이 어노테이션을 사용함으로써 뷰에서 @ModelAttribute("이름")의 "이름"을 사용할 수 있음
이 어노테이션을 C파트에서 사용을 하면
@Controller 파트에서 @MA를 사용하면, @RequestMapping보다 먼저 수행됨
가장면저 처리된다는 특징이 있음
MainController
@ModelAttribute("searchMap")
public Map<String,String> searchMap(){
Map<String,String> map = new HashMap<String,String>();
map.put("제목", "TITLE");
map.put("작성자", "WRITER");
return map;
}
사용하려면 이런싯으로 메서드 위에 사용함
RequestMapping보다 먼저 수행되는 특징이있어서 /main.do보다 먼저
@ModelAttribute - 커맨드 객체앞에 쓰는것보다 메서드 위에 쓰는 경우가 훨씬 많음
<c:forEach var="v" items="${searchMap}">
<option value = "${v.value}">${v.key}</option>
</c:forEach>
뷰가 어떤 검색이 가능한지 몰라도 됨