//
Model Data
Controller가 request 처리 후 view에 전달하는 데이터
Command 객체, request 처리 결과, view 생성에 필요한 참조 데이터 등
<br>
ModelAndView를 이용한 Model Data 설정
Controller의 처리 결과를 출력할 view 이름 지정
View에 전달할 데이터 저장
[ Constructors ]
public ModelAndView(String viewName)
public ModelAndView(String viewName, Object modelObject)
생성자를 통해 전달하는 경우는 View에 전달할 객체가 하나인 경우에 유용함.
[ Setters ]
public void setViewName(String viewName)
public ModelAndView addObject(String attributeName, Object modelObject)
<br>
@ModelAttribute
parameter나 return 객체에 이름을 부여하고 view에 전달
여러 view에서 공통으로 참조되는 모델 데이터 생성
public class GameSearchController {
private SearchService searchService;
static final Logger LOGGER = LoggerFactory.getLogger(GameSearchController.class);
//여러 view에서 공통으로 참조되는 모델 데이터 생성
("searchTypeList") //view에서 참조될 모델 객체의 이름
public List<SearchType> referenceSearchTypeList() {
List<SearchType> options = new ArrayList<SearchType>();
options.add(new SearchType(1, "전체"));
options.add(new SearchType(2, "아이템"));
options.add(new SearchType(3, "캐릭터"));
return options;
}
("popularQueryList")
public String[] getPopularQueryList() {
return new String[] { "게임", "창천2", "위메이드" };
}
...
}
<br>
"/search/main" view
<%@ page language="java" contentType="text/html; charset=EUC-KR"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>게임 검색 메인</title>
</head>
<body>
인기 키워드: <c:forEach var="popularQuery" items="${popularQueryList}">${popularQuery} </c:forEach>
<form action="game.do">
<select name="type">
<c:forEach var="searchType" items="${searchTypeList}">
<option value="${searchType.code}">${searchType.text}</option>
</c:forEach>
</select>
<input type="text" name="query" value=""/>
<input type="submit" value="검색" />
</form>
</body>
</html>
<br>
service searchType
public class SearchType {
private int code;
private String text;
public SearchType(int code, String text) {
this.code = code;
this.text = text;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
<br>
Command 객체 초기화
GET request에 대해 form의 항목들을 초기화 한 후 view에 출력
POST request에 대해 form에 입력된 값들을 전달
"/account/create.do") (
public class CreateAccountController {
("memeber") //command 객체 이름 저장
public MemberInfo formBacking(HttpServletRequest request) {
if (request.getMethod().equalsIgnoreCase("GET")) {
MemberInfo mi = new MemberInfo(); //command 객체 생성
Address address = new Address();
address.setZipcode(autoDetectZipcode(request.getRemoteAddr()));
mi.setAddress(address); //address필드 초기화
return mi;
} else {
return new MemberInfo();//command 객체 생성
}
}
private String autoDetectZipcode(String remoteAddr) {
return "000000";
}
(method = RequestMethod.GET)
public String form() {
return "account/creationForm";
//formBacking()에 의해 생성 및 초기화된 "memeber"객체가 자동적으로 view에 전달됨
}
(method = RequestMethod.POST)
public String submit( ("memeber") MemberInfo memberInfo,
BindingResult result){
//formBacking()에 의해 생성된 "memeber"객체에 form입력 값들이 저장된 후, memeberInfo로 참조됨
new MemberInfoValidator().validate(memberInfo, result);
if (result.hasErrors()) {
return "account/creationForm";
}
// accountService.createAccount(memberInfo); // 요청 처리
return "account/created"; //"member"객체가 view에 전달됨
}
}
<br>
creationForm.jsp
<title>계정 생성</title>
</head>
<body>
<form:form commandName="memeber" method="post">
아이디: <form:input type="text" path="id" value="${id}" />
<form:errors path="id" />
<br/>
이름: <form:input type="text" path="name" value="${name}" />
<form:errors path="name" />
<br/>
우편번호: <form:input type="text" path="address.zipcode" value="${address.zipcode}" />
<form:errors path="address.zipcode" />
<br/>
주소1: <form:input type="text" path="address.address1" value="${address.address1}" />
<form:errors path="address.address1" />
<br/>
주소2: <form:input type="text" path="address.address2" value="${address.address2}" />
<form:errors path="address.address2" />
<br/>
<input type="submit" value="전송"/>
</form:form>
</body>
'Computer Science > Spring' 카테고리의 다른 글
#9 HTTP Session 사용 (0) | 2018.06.16 |
---|---|
#8 Form 입력 값 검증 (0) | 2018.06.16 |
#6 Command 객체 이용한 Form 전송 처리 (2) | 2018.05.25 |
#5 Spring MVC 구조 (0) | 2018.05.25 |
#4 Bean 객체의 life-cycle 관리 (0) | 2018.05.14 |