2014-05-10 10 views
6

jestem nowy wiosna learner.i'm naprawdę mylić o tym, co jest różnica między dwa pojęcia:Jaka jest różnica między @ModelAttribute, model.addAttribute na wiosnę?

  1. @ModelAttribute
  2. model.addAttribute

się poniżej istnieją dwa "user" value.Are to samo? Dlaczego powinienem używać w ten sposób? Dziękuję wszystkim

@RequestMapping(method = RequestMethod.GET) 
public String setupForm(ModelMap model) { 
    model.addAttribute("user", new User()); 
    return "editUser"; 
} 

@RequestMapping(method = RequestMethod.POST) 
public String processSubmit(@ModelAttribute("user") User user, BindingResult result, SessionStatus status) { 
    userStorageDao.save(user); 
    status.setComplete(); 
    return "redirect:users.htm"; 
} 

Odpowiedz

6

Przy stosowaniu na argument, @ModelAttribute zachowuje się następująco:

@ModelAttribute na metodzie argument wskazuje, że argument powinien być pobierany od modelu. Jeśli nie ma go w modelu, argument powinien zostać najpierw utworzony, a następnie dodany do modelu. Gdy obecne są w modelu, pola argumentów powinny być wypełnione ze wszystkich parametrów żądania, które mają pasujące nazwy. Jest to tak zwane powiązanie danych w Spring MVC, bardzo przydatnym mechanizmie, który pozwala uniknąć pojedynczego analizowania każdego pola formularza. http://docs.spring.io/spring/docs/4.1.0.BUILD-SNAPSHOT/spring-framework-reference/htmlsingle/#mvc-ann-modelattrib-method-args

To bardzo ważna funkcja. W twoim przykładzie obiekt User jest automatycznie wypełniany przez żądanie POST przez Spring.

Pierwsza metoda polega jednak po prostu na utworzeniu instancji User i dodaje ją do modelu. To może być napisany tak, aby korzystać z @ModelAttribute:

@RequestMapping(method = RequestMethod.GET) 
public String setupForm(@ModelAttribute User user) { 
    // user.set... 
    return "editUser"; 
} 
+0

Dziękuję Twój komentarz jest bardziej clear.so używamy atrybutu modelu, aby pobrać dane z pliku jsp i wysyłać dane do pliku jsp jesteśmy z wykorzystaniem modelu zwrócenie modelandview z obsługi, prawda? – ssmm

+0

Możesz użyć ModelAttribute w obu przypadkach, ponieważ umieszcza atrybuty w zakresie żądania, dzięki czemu są one dostępne w kontekście jsp. Zwróć tylko nazwę widoku lub przekierowanie, ponieważ wystarczający jest ciąg znaków. –

Powiązane problemy