728x90
Command 객체는 별도의 설정 없이 바로 VIEW에서 EL 표현식으로 사용가능하다. (단, 클래스 타입을 소문자로 시작해야함)
일반적으로는 값을 VIEW에 넘기려하면, MAV를 사용하여 넘겨준다.
현재는 VIEW가 VO를 알고있는 상황으로 설정되어 있지만 보통은 VIEW에서는 VO 개념을 모르기 때문에 "@ModelAttribute()" 로 객체를 VIEW에 넘겨줘야한다.
또한, 현재 Controller 객체의 메소드 OUTPUT은 Stirng 혹은 ModelAndView로 설정되어 있는데, ModelAndView를 Model 형태로 변경하고, 반환값은 보다 가벼운 String으로 통일할 예정이다.
@ModelAttribute() 사용 이유
View에서 사용할 데이터를 세팅하려는 목적으로 활용하는 어노테이션
@Controller 파트에서 사용하면 @RequsetMapping 보다 먼저 수행됨. 즉, 가장 먼저 처리된다는 특징이 있음.
또한, 선언 위치는 메소드 최상단에 위치함.
@ModelAttribute()의 장점
View 사용자가 무엇을 검색해야 하는지를 몰라도 사용할 수 있다..!
MainController.java
@ModelAttribute("searchMap")
public Map<String,String> searchMap(){
Map<String,String> map=new HashMap<String,String>();
map.put("제목", "TITLE");
map.put("작성자", "WRITER");
return map;
}
main.jsp
<select name="searchCondition">
<c:forEach var="v" items="${searchMap}">
<option value="${v.value}">${v.key}</option>
</c:forEach>
</select>
또한, Command 객체에서 View에서 EL 표현식 안에 사용할 객체명을 정할 수 있다. 이와 같이 테이블에 없는 변수명을 사용할 땐 VO에 임시변수를 선언해놓는 것이 보편적이다.
MainController.java
@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));
// --> 이전 코드 mav.addObject("datas", bDAO.selectAll(bVO));
return "main.jsp";
}
mav를 model로 변경한 이유는 view를 사용하지 않아 model만 관여하는 객체인 model로 변경한 것
Header.tag
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:if test="${empty member}">
<form action="login.do" method="post">
아이디 <input type="text" name="mid" value="${mem.mid}" required> <br>
비밀번호 <input type="password" name="mpw" value="${mem.mpw}" required> <br>
<input type="submit" value="로그인">
</form>
</c:if>
<c:if test="${not empty member}">
<a href="logout.do">로그아웃</a>
<br>
<a href="insertBoard.do">글 작성</a>
</c:if>
728x90
'Spring' 카테고리의 다른 글
[Spring] AOP (Aspect Oriented Programming) (0) | 2023.08.11 |
---|---|
[Spring] 2 - Layerd 아키텍처 스타일 (0) | 2023.08.11 |
[Spring] @Component를 상속받은 어노테이션 (0) | 2023.08.10 |
[Spring] Spring MVC (0) | 2023.08.09 |
[Spring] ViewResolver (0) | 2023.08.09 |