model
이유는 printHello
있어서 입력 변수로 선언? 지역 변수로 말하지 않습니까?
당신은 지역 변수로 선언하고 당신이 원하는 경우를 반환 할 수 있습니다
이
@RequestMapping("/hello")
public ModelMap printHello() {
return new ModelMap("message", "Hello Spring MVC Framework!");
}
하지만 바인딩 봄의 데이터를 활용하지 않은이 방법은 (바인딩 요청이 GET 요청 (쿼리 매개 변수) 속성 모델링). 또한
이 방법은 (원래 예를
return "hello"
같이) 어떤 뷰 이름을 제공하지 않는, 스프링 MVC는 논리적 뷰 이름으로
Controller
접미사없이 컨트롤러 이름을 사용하여 기본
DefaultRequestToViewNameTranslator
를 사용하여 추론 있도록 (귀하의 예제에서이
hello
될 것입니다 귀하의 컨트롤러가
HelloController
이기 때문에). 자세한 내용은
documentation을 참조하십시오.
또한 Model
또는 ModelMap
대신 새로운 ModelAndView
인스턴스를 반환 할 수 있습니다. 이 경우 명시 적으로 뷰 이름 및 모델 속성을 설정할 수 있습니다.
그러나 모델을 처리기 메서드 인수로 사용하면 데이터 바인딩이 주 장점입니다. 당신이 모델 및 일부 모델 속성을 제공 할 때
메소드 인자로 (요청을 바인딩 할), 당신은 이미 추가 (및 요청 PARAMS 사용하여 작성) 모델에 모델 속성을 가진 모델 인스턴스를 얻을 당신은 추가 할 수 있습니다 필요한 경우 다른 특성이 있습니다.
@RequestMapping(path = "/hello", method = RequestMethod.GET)
public String printHello(Model model, @ModelAttribute("form") SearchForm form, BindingResult result) {
model.addAttribute("anotherUsefulValue", myService.getSomeValue());
// 'hello' view will get the model with both 'form' and 'anotherUsefulValue' attributes
// and 'form' attribute will have 'text' field filled from request's
// query parameter 'text'.
return "hello";
}
class SearchForm {
private String text;
// ... getter and setter
}
이 방법을 사용하면 text
라는 이름의 텍스트 필드에 일부 HTML form
에서 요청을 GET 할 수 있으며,이 양식을 제출하면 모델 값으로 인스턴스화 SearchForm
객체 속성 form
포함됩니다. 이 개체의 text
필드에는 값으로 text
쿼리 매개 변수가 있습니다. spring-form JSP Tag Library를 사용
예 :
<form:form method="GET" action="/hello" modelAttribute="form">
<form:input path="text" />
<input type="submit">
</form>
하거나 URL /hello?text=12345
을 입력합니다. 그리고 model
은 form
특성을 가지며 text
필드는 12345
이고,은 anotherUsefulValue
특성을 갖습니다. Spring의 데이터 바인딩을 사용자 정의 모델 속성과 결합한 것입니다.
물론 수동으로 새 모델을 만들고 form
인수에서 form
속성과 함께 을 설정할 수 있습니다. 그러나 그것은 단지 보편적 인 것입니다.
model
데도 명시 적으로, 그래서 이것은 어떻게 든 무대 뒤에서 발생합니까 뷰에 전달되고 있지
?
물론. 봄의 DispatcherServlet
다른 많은 것들과 마찬가지로 이것을하십시오. 이 모든 내용은 documentation에 설명되어 있습니다.
Front Controller
당신의 컨트롤러 메소드가 반환 알고 그것은 새로운 모델이 나 방법이 어떤 모델을 반환하지 다음 Front Controller
그것을 인수로 컨트롤러 메소드로 전달 모델을 사용하는 경우 이해할 수있다.
DispatcherServlet이 HandlerMapping을 참조하여 해당 Controller를 호출 할 때, 아마도 자신의 ModelMap 객체를 생성하여 메서드의 인수에 전달할 수 있다고 생각합니다. 그리고 만약 여러분이 로컬 인스턴스화를 통해 명시 적으로 생성하면 객체는 핸들러에 의해 관리되지 않으므로 바인딩이 발생하지 않습니다. 따라서 관례/협약으로 간주 할 수 있습니다. –