2014-05-10 13 views
6

Sono nuovo learner.i'm primavera molto confuso su ciò che è la differenza tra due concept:Qual è la differenza tra @ModelAttribute, model.addAttribute in primavera?

  1. @ModelAttribute
  2. model.addAttribute

in seguito ci sono due "utente" valore. Sono queste stesse cose? Perché dovrei usare in questo modo? Grazie tutti

@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"; 
} 

risposta

6

Quando utilizzato su un argomento, @ModelAttribute si comporta come segue:

Un @ModelAttribute su un argomento metodo indica l'argomento dovrebbe essere recuperate dal modello. Se non è presente nel modello, l'argomento deve essere prima istanziato e quindi aggiunto al modello. Una volta presenti nel modello, i campi dell'argomento devono essere compilati da tutti i parametri di richiesta con nomi corrispondenti. Questo è noto come associazione dati in Spring MVC, un meccanismo molto utile che ti evita di dover analizzare singolarmente ogni campo del modulo. http://docs.spring.io/spring/docs/4.1.0.BUILD-SNAPSHOT/spring-framework-reference/htmlsingle/#mvc-ann-modelattrib-method-args

Questa è una funzionalità molto potente. Nel tuo esempio, l'oggetto Utente viene popolato automaticamente dalla richiesta POST da Spring.

Il primo metodo, tuttavia, crea semplicemente un'istanza di User e lo aggiunge al modello. Potrebbe essere scritto come quello di beneficiare di @ModelAttribute:

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

Grazie tuo commento è più clear.so stiamo usando attributo del modello per ottenere i dati da file jsp e di inviare dati a file JSP che stiamo usando il modello con restituendo modelandview dal gestore, giusto? – ssmm

+0

In entrambi i casi, è possibile utilizzare ModelAttribute, poiché inserisce gli attributi nell'ambito della richiesta in modo che siano disponibili nel contesto jsp. Continua a restituire solo il nome della vista o il reindirizzamento in quanto qui è sufficiente una stringa. –

Problemi correlati