Spring MVC: erklären Sie bitte den Unterschied zwischen @RequestParam und @ModelAttribute

Ich bin neu in Spring MVC. Helfen Sie mir bitte entpacken Sie die Dokumentation.

Dokumentation

Spring MVC Dokumentation Staaten (Hervorhebung von mir):

  • @ModelAttribute auf eine Methode argument gibt das argument abgerufen werden sollen, aus dem Modell. Wenn nicht in dem Modell, das argument muss instantiiert werden und erst dann dem Modell Hinzugefügt. Einmal vorhanden in dem Modell, das argument der Felder sollte ausgefüllt werden von allen request-Parametern, die haben den passenden Namen. Die WebDataBinder Klasse matches Anfrage parameter-Namen — inklusive query-string-Parameter und die form-Felder — Modell Attribut-Felder nach Namen.

  • @RequestParam bindet request-Parameter, um einen parameter einer Methode in Ihrer Steuerung.

Haftungsausschluss /Klär -

Ich weiß, dass @ModelAttribute und @RequestParam sind nicht die gleiche Sache, die sich nicht gegenseitig ausschließen, führen Sie nicht die gleiche Rolle, und können gleichzeitig verwendet werden, wie in diese Frage - in der Tat @RequestParam können verwendet werden, um füllen Sie Felder von @ModelAttribute. Meine Frage ist eher darauf ausgerichtet, die Differenz zwischen Ihrem Innenleben.

Frage:

Was ist der Unterschied zwischen @ModelAttribute (auf eine Methode argument, nicht-Methode) und @RequestParam? Speziell:

  • Quelle: Tun @RequestParam und @ModelAttribute haben die gleiche Quelle
    Informationen /Bevölkerung, d.h. Anfrage-Parameter in der URL die geliefert wurde, als Elemente einer form /Modell POSTed?
  • Verwendung: Ist es richtig, daß Variablen abgerufen mit @RequestParam weggeworfen werden (es sei denn, bestanden in einem Modell), während die Variablen abgerufen mit @ModelAttribute werden automatisch eingespeist in das Modell zurückgegeben werden?

Oder in sehr einfachen Codierung Beispiele, was ist die wirkliche Arbeit den Unterschied zwischen diesen beiden Beispielen?

Beispiel 1: @RequestParam:

//foo and bar are thrown away, and are just used (e.g.) to control flow?
@RequestMapping(method = RequestMethod.POST)
public String testFooBar(@RequestParam("foo") String foo,
@RequestParam("bar") String bar, ModelMap model) {
    try {
     doStuff(foo, bar);
    }
    //other code
  }

Beispiel 2: @ModelAttribute:

//FOOBAR CLASS
//Fields could of course be explicitly populated from parameters by @RequestParam
public class FooBar{
    private String foo;
    private String bar;
   //plus set() and get() methods
}

//CONTROLLER
//Foo and Bar become part of the model to be returned for the next view?
@RequestMapping(method = RequestMethod.POST)
public String setupForm(@ModelAttribute("fooBar") FooBar foobar) {
   String foo = fooBar.getFoo();
   String bar = fooBar.getBar();
   try {
      doStuff(foo, bar);
   }
   //other code
}

Mein Aktuelles Verständnis:

@ModelAttribute und @RequestParam beide zu befragen, der request-Parameter für die Informationen, aber diese Informationen anders:

  • @RequestParam nur füllt stand-alone-Variablen (kann natürlich sein, Felder in einem @ModelAttribute Klasse). Diese Variablen werden weggeworfen, wenn der Controller fertig ist, es sei denn, Sie wurden eingespeist in das Modell ein.

  • @ModelAttribute füllt die Felder einer Klasse, die füllt dann ein Attribut des Modells werden zurück an die view

Ist das richtig?

InformationsquelleAutor der Frage Lydia Ralph | 2015-03-31

Schreibe einen Kommentar