2012-03-31 9 views
2

Als Spring Specification said wird @ModelAttribute vor dem Mapping-Handler ausgeführt und @SessionAttribute behält das Modellattribut in der Sitzung.@ModelAttribute und @SessionAttribute im Frühjahr

Betrachten Sie unten Szenario: Form Bean wird erstellt, nachdem der Controller aufgerufen und als Sitzungsattribut festgelegt ist. Das nächste Mal, wenn MenuController aufgerufen wird, wird createForm() erneut ausgeführt und eine weitere neue Form-Bean erstellt. Meine Frage ist: Wird diese zuletzt erstellte Form Bean als Sitzungsattribut gesetzt? und welche Form Bean wird an den Parameter in der Methode bookList() gebunden?

Ich hoffe, ihr könnt helfen. Vielen Dank.

@Controller 
@RequestMapping("/store") 
@SessionAttribute("form") 
public class MenuController { 
    @ModelAttribute("form") 
    public Form createForm() { 
    return new Form(); 
    } 

    @RqeustMapping("/book") 
    public String bookList(@ModelAttribute("form") Form form){ 
    //processing the form 
    } 
} 

Antwort

1

Denken Sie daran, dass Ihr Mapping verallgemeinert ist. Es wird sowohl einer GET-Methode als auch einer POST-Methode zugeordnet.

Wenn Ihre Anfrage Mapping eine GET-Methode ist,

Die Session-Attribut wird der Wert des @ModelAttribute ("Form") von der Methode Create halten.

Wenn ein Attribut Form aus einer POST-Anforderung zurückgegeben wird,

Das Sitzungs-Attribut das Attribut aus der @Model Create Methode überschreibt.

Es ist hilfreich, daran zu denken, dass @ModelAttribute vor dem Mapping-Handler ausgeführt wird.

0

Das sessionAttribute gibt an, dass das "Formular" in der Sitzung gespeichert wird. nicht bedeutet, dass das "Formular" aus der Sitzung abgerufen wird.