Представьте код, как этот:@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) {
...
}
Я использую инициализации связующего, чтобы избежать этого поля может быть переплетены, и я пометить метод (prepareUser()) с @ModelAttribute подготовить мой объект User перед привязкой. Поэтому, когда я вызываю/пользователь/сохраняю initBinder() и prepareUser(), выполняются.
Я установил «пользователь» как в @InitBinder, так и в @ModelAttribute, поэтому Spring-MVC мог понять, что эти методы должны применяться только перед выполнением метода с помощью @ModelAttribute («пользователь»).
Проблема заключается в том, что метод, аннотированный с помощью @ModelAttribute («пользователь»), выполняется перед каждым отображаемым методом этого контроллера. Например, если я вызываю/users prepareUser выполняется перед методом list(). Как я могу сделать, что этот компилятор выполняется только до метода save(), имеющего все методы в одном контроллере?
Благодаря
Что на самом деле делает `prepareUser`? – skaffman 2010-12-02 13:41:25
@skaffman принимает параметр имени пользователя и загружает объект User из базы данных, поэтому все данные, которые не могут быть привязаны (например, пароль), не перезаписываются с нулевыми значениями, когда они сохраняются после привязки – Javi 2010-12-02 13:44:35