메소드의 파라미터로 사용되는 경우
@ModelAttribute와 @RequestParam의 차이
@RequestParam
@RequestParam 어노테이션은 사용자가 요청시 전달하는 값을 Controller의 매개변수로 1:1 맵핑할 때 사용되는 어노테이션입니다.
public String getHealthBoardList(
@RequestParam(value = "searchCondition", defaultValue = "TITLE", required = false) String condition,
@RequestParam(value = "searchKeyword", defaultValue = "", required = false) String keyword,
HttpServletRequest request, Model model){
BoardVO vo = new BoardVO();
System.out.println(boardService);
List<BoardVO> boardList = boardService.getBoardList(vo);
model.addAttribute("boardList",boardList);
return "healthBoardList.jsp";
}
예를들어, /?searchCondition=TITLE?searchKeyword=헬스 로 요청이 온다면, 위 매개변수인 condition에서 "TITLE", keyword에서 "헬스"가 매핑된다.
@ModelAttribute
@ModelAttribute는 사용자가 요청시 전달하는 값을 오브젝트 형태로 매핑해주는 어노테이션입니다.
public class BoardVO {
private int seq;
private String title;
private String writer;
private String content;
private Date regDate = new Date();
private int liky;
private String searchCondition;
private String searchKeyword;
...
getter
setter
}
public String getHealthBoardList(HttpServletRequest request, Model model, @ModelAttribute BoardVO vo){
List<BoardVO> boardList = boardService.getBoardList(vo);
model.addAttribute("boardList",boardList);
return "healthBoardList.jsp";
}
예를들어, searchCondition, searchKeyword를 인스턴수 변수로 가지는 BoardVO 객체가 존재하고 이를 매개변수로 받기 위해서는 BoardVO 객체에 setter메소드가 존재해야한다.
/?searchCondition=TITLE?searchKeyword=헬스 로 요청이 온다면, 각각의 값이 BoardVO 객체로 바인딩 됩니다.
메소드단으로 사용될 경우
@ModelAttribute는 Controller 클래스에 있는 특정 데이터를 View(.jsp페이지)에서 사용할 수 있도록 사용될 수도 있다.
어떤 컨트롤러 클래스 안에 있는 특정 메소드에 @ModelAttriubte 어노테이션이 붙어 잇으면 해당 컨틀롤러 클래스의 모든 @RequestMapping 어노테이션이 붙은 메소드가 호출될 때마다 그 메소드 호출 전에 @ModelAttribute가 붙은 메소드가 일단 먼저 호출되고 그 이후 @RequestMapping이 붙은 메소드가 호출되는 데 이때 @ModelAttribute 메소드 실행 결과로 리턴되는 객체는 자동으로 @RequestMapping 어노테이션이 붙은 메소드의 Model에 저장이되고 그 이후에 view에서 @ModelAttribute 메소드가 반환한 데이터를 사용할 수 있다.
@ModelAttribute("conditionMap")
public Map<String,String> searchConditionMap(){
Map<String, String> conditionMap = new HashMap<String, String>();
conditionMap.put("제목", "TITLE");
conditionMap.put("내용", "CONTENT");
return conditionMap;
}
@RequestMapping("/getHealthBoardList.do")
public String getHealthBoardList(HttpServletRequest request, Model model){
System.out.println("글 목록 검색 처리");
// 1. 사용자 입력 정보 추출 : 검색 기능은 나중에 구현
// 2. 데이터베이스 연동 처리
BoardVO vo = new BoardVO();
System.out.println(boardService);
List<BoardVO> boardList = boardService.getBoardList(vo);
// 3. 응답 화면 구성
model.addAttribute("boardList",boardList);
return "healthBoardList.jsp";
}
<select name="searchCondition">
<c:forEach items="${conditionMap }" var="option">
<option value="${option.value }">${option.key }</option>
</c:forEach>
</select>
<input type="text" name="searchKeyword" />
<input type="submit" value="검색" />
이상입니다!~
'Spring' 카테고리의 다른 글
[김영한님 - 스프링의 핵심원리] Spring - 스프링이 필요한 이유(1) (0) | 2022.09.18 |
---|---|
파일 업로드 - BindException 에러 해결, multipart (0) | 2022.08.26 |
EmptyResultDataAccessException 해결, jdbcTemplate.queryForObject에 관하여 (0) | 2022.08.21 |
BeanCreationException, NoSuchBeanDefinitionException 에러 해결 (0) | 2022.08.19 |
this.userDAO is null - NullPointerException (0) | 2022.08.19 |