[JAVA]/Spring
[Spring] Spring MVC 6: @ModelAttribute 어노테이션
춘햄
2021. 6. 23. 15:53
이전 포스팅에서 Command 객체의 이름을 임의로 변경하기 위해서 @ModelAttribute 어노테이션을 한번 사용했었다.
그러나 이외에도 View 단에서 사용할 데이터를 미리 설정해놓는 용도로도 @ModelAttribute 어노테이션을 사용할 수 있다.
바로 확인해보자.
우선, BoardController 클래스의 다른 컨트롤러 매서드 상단에 다음과 같이 Map을 반환하는 매서드를 선언하여 상단에 @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(value= "/getBoardList.do")
public String getBoardList(BoardVO vo, BoardDAO dao, Model model) {
System.out.println("목록 처리");
List<BoardVO> boardList= dao.getBoardList(vo);
model.addAttribute("boardList", boardList);
return "getBoardList.jsp";
}
이렇게 설정해놓으면, 다른 Controller보다 searchConditionMap 매서드가 먼저 실행되며, 리턴 값을 Model 객체에 저장한다.
따라서 직전 포스팅과 같이 @RequestParam 어노테이션을 사용하지 않고, 미리 Model 객체에 저장된 Map을 이용하여 View 단에 값을 전달할 수 있는 것이다.
View에서는 다음과 같이 표기가 가능하다.
<tr>
<td align="right">
<select name="searchCondition">
<c:forEach items = "${conditionMap }" var = "option">
<option value = "${option.value }">${option.key }
</c:forEach>
</select>
<input type="text" name="searchKeyword" />
<input type="submit" value="검색">
</td>
</tr>
반응형