티스토리 뷰

이전 포스팅에서 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>

 

반응형
Comments