두가지 기능을 가진 @ModelAttribute
@ModelAttribute를 Controller 메서드의 매개변수로 선언된 Command 객체의 이름을 변경할 때 사용할 수 있다고 배웠다. 추가로, View(JSP)에서 사용할 데이터를 설정하는 용도로도 사용할 수 있다.
@ModelAttribute가 설정된 메서드는 @RequestMapping 어노테이션이 적용된 메서드보다 먼저 호출된다. 그리고 @ModelAttribute 메서드 실행 결과로 리턴된 객체는 자동으로 Model에 저장된다. 따라서 리턴된 객체를 View 페이지에서 사용할 수 있다.
두개의 컬렉션을 리턴
예를 들면, 다양한 검색 조건이 저장된 Map을 리턴해준다고 하자.
아래 코드와 같이 총 2개의 컬렉션을 사용할 수 있다.
@ModelAttribute("map")
public Map searchConditionMap() {
Map conditionMap = new HashMap();
conditionMap.put( "1", "최신순" );
conditionMap.put( "2", "오래된 순" );
conditionMap.put( "3", "추천순" );
conditionMap.put( "4", "인기순" );
return conditionMap;
}
@RequestMapping("/getBoardList.do")
public String getBordList(BoardVo vo, BoardDAO dao, Model model) {
model.addAttribute( "boardList", dao.getBoardList(vo));
return "getBoardList.jsp";
}