[SPRING] 메소드의 @ModelAttribute
SPRING메소드의 @ModelAttribute
다음과 같은 코드를 상상해보십시오.
@RequestMapping(value="/users", method=RequestMethod.GET)
public String list(Model model) {
...
}
@InitBinder("user")
public void initBinder(WebDataBinder binder) {
binder.setDisallowedFields("password"); // Don't allow user to override the value
}
@ModelAttribute("user")
public User prepareUser(@RequestParam("username") String username){
...
}
@RequestMapping(value="/user/save", method=RequestMethod.POST)
public String save(@ModelAttribute("user") User user, Model model) {
...
}
필자는 필드를 바인드 할 수 없도록하기 위해 init 바인더를 사용하고 바인드되기 전에 @ModelAttribute로 메소드 (prepareUser ())를 표시하여 사용자 객체를 준비합니다. 그래서 / user / save를 호출하면 initBinder ()와 prepareUser ()가 실행됩니다.
Spring MVC가 @ModelAttribute ( "user")로 메소드를 실행하기 전에이 메소드를 적용해야한다는 것을 이해할 수 있도록 @InitBinder와 @ModelAttribute에서 "user"를 설정했습니다.
문제는 @ModelAttribute ( "user")로 주석 된 메소드가이 컨트롤러의 모든 매핑 된 메소드보다 먼저 실행된다는 것입니다. 예를 들어, / user를 호출하면 prepareUser는 list () 메소드보다 먼저 실행됩니다. 어떻게이 preparer은 같은 컨트롤러에 모든 메소드를 가지고있는 save () 메소드 전에 만 실행될 수 있습니까?
감사
해결법
-
==============================
1.그것은 실제로 @ModelAttribute가 필요한 것이 아닙니다. 메서드 매개 변수로 사용하면 주석이 달린 매개 변수가 모델에 저장됩니다 (괜찮습니다). 메서드에 넣으면 컨트롤러의 모든 메서드에 액세스해야하는 참조 데이터를 제공 할 때마다 호출됩니다.
그것은 실제로 @ModelAttribute가 필요한 것이 아닙니다. 메서드 매개 변수로 사용하면 주석이 달린 매개 변수가 모델에 저장됩니다 (괜찮습니다). 메서드에 넣으면 컨트롤러의 모든 메서드에 액세스해야하는 참조 데이터를 제공 할 때마다 호출됩니다.
User 객체 구축을 제어하려면 몇 가지 옵션이 있습니다. 나에게 가장 명백한 두 가지는 다음과 같습니다.
from https://stackoverflow.com/questions/4335432/modelattribute-in-a-method by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] wildfly 10의 HTTP 요청을 https로 리디렉션합니다. (0) | 2019.02.15 |
---|---|
[SPRING] 외부 JAR 파일에서 JPA Entity로드 (0) | 2019.02.15 |
[SPRING] Thymeleaf에서 객체의 메서드를 호출하는 방법? (0) | 2019.02.15 |
[SPRING] jsf managed beans에 @autowire하는 방법 (0) | 2019.02.15 |
[SPRING] Jedis, jedis 연결을 얻을 수 없습니다 : 풀에서 자원을 가져올 수 없습니다. (0) | 2019.02.15 |