Frage

Was ist der Zweck und die Verwendung von @ModelAttribute in Spring MVC?

War es hilfreich?

Lösung

@ModelAttribute bezieht sich auf eine Eigenschaft des Modellobjekts (die M in MVC;) so lassen Sie uns sagen, dass wir ein Formular mit einem Formular Träger Objekt haben, die „Person“ genannt wird, Dann können Sie Spring MVC dieses Objekt an eine Controller-Methode liefern, indem die @ModelAttribute Anmerkung mit:

public String processForm(@ModelAttribute("person") Person person){
    person.getStuff();
}

Auf der anderen Seite ist die Anmerkung zu definieren Objekte verwendet, den Teil eines Modells sein sollte. Also, wenn Sie in dem Modell referenziert eine Person Objekt haben wollen, können Sie die folgende Methode verwenden:

@ModelAttribute("person")
public Person getPerson(){
    return new Person();
}

Diese kommentierte Methode den Zugriff auf das Objekt Person in Ihrer Ansicht ermöglichen, da es automatisch an die Modelle von Spring hinzugefügt wird.

Unter " Mit @ModelAttribute ".

Andere Tipps

Ich weiß, das ist ein alter Thread, aber ich dachte, dass ich meinen Hut in den Ring werfen und sehen, ob ich das Wasser ein wenig mehr Bit trüben kann:)

fand ich meinen ersten Kampf zu verstehen @ModelAttribute ein Ergebnis des Frühlings Entscheidung mehrere Anmerkungen zu einem kombinieren war. Es wurde klarer, wenn ich es in mehrere kleinere Anmerkungen aufgeteilt:

Für Parameter Anmerkungen, denken Sie an @ModelAttribute als Äquivalent @Autowired + @Qualifier heißt es versucht, eine Bohne mit dem angegebenen Namen aus dem Spring-verwalteten Modell abzurufen. Wenn der benannte Bean nicht gefunden wird, statt einen Fehler zu werfen oder null Rückkehr, es nimmt implizit über die Rolle der @Bean das heißt eine neue Instanz Erstellen Sie den Standard-Konstruktor verwenden und die Bohne zum Modell hinzuzufügen.

Für Methode Anmerkungen, denken Sie an @ModelAttribute als äquivalent @Bean + @Before, das heißt es die Bohne von Benutzer-Code in dem Modell konstruiert legt und es ist immer, bevor eine Anfrage Behandlungsmethode genannt.

Bildlich, ich sehe @ModelAttribute wie folgt (bitte nicht wörtlich nehmen !!):

@Bean("person")
@Before
public Person createPerson(){
  return new Person();
}

@RequestMapping(...)
public xxx handlePersonRequest( (@Autowired @Qualifier("person") | @Bean("person")) Person person, xxx){
  ...
}

Wie Sie sehen können, hat Frühling die richtige Entscheidung eine allumfassende Anmerkung zu machen @ModelAttribute; niemand will eine Anmerkung Sammelsurium sehen.

Für meinen Stil, ich benutze @ModelAttribute immer zu fangen Objekt aus Federform jsp. zum Beispiel, ich Formular auf jsp Seite entwerfen, das Formular exist mit command

<form:form commandName="Book" action="" methon="post">
      <form:input type="text" path="title"></form:input>
</form:form>

und ich fange das Objekt auf Controller mit Folge Code

public String controllerPost(@ModelAttribute("Book") Book book)

und jedes Feldname Buch Spiel mit Pfad in Unterelement Form sein muss,

Also ich werde versuchen, es in einfacher Art und Weise zu erklären. Lassen Sie uns haben:

public class Person {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(final String name) {
        this.name = name;
    }
}

Wie in der Spring MVC-Dokumentation beschrieben - die @ModelAttribute Anmerkung auf Methoden verwendet werden können, oder auf Methodenargumente . Und natürlich können wir sowohl den Einsatz bei gleichzeitig in einem Controller haben.

1.Verfahren Anmerkung

@ModelAttribute(“cities”)
 public List<String> checkOptions(){
 return new Arrays.asList(new[]{“Sofia”,”Pleven","Ruse”});//and so on
}

Zweck eines solchen Verfahrens ist Attribut im Modell hinzuzufügen. Also in unserem Fall Städte , um die Liste new Arras.asList(new[]{“Sofia”,”Pleven","Ruse”}) als Wert im Modell haben (können Sie sich vorstellen Modell als Karte (key: value)). @ModelAttribute Methoden in einem Controller werden, bevor aufgerufen @RequestMapping Methoden, im selben Controller.

Hier wollen wir auf das Modell gemeinsam Informationen hinzuzufügen, die in der Form verwendet werden, um den Benutzer anzuzeigen. Zum Beispiel kann es verwendet werden, um eine HTML zu füllen wählen:

 image description hier

eingeben

2.Verfahren Argument

public String findPerson(@ModelAttriute(value="person") Person person) {
    //..Some logic with person
    return "person.jsp";
}

Ein @ModelAttribute auf ein Verfahren Argument gibt das Argument aus dem Modell abgerufen werden sollen. Also in diesem Fall erwarten wir, dass wir im Modell Mensch Objekt als Schlüssel haben, und wir wollen ihren Wert erhalten und setzen es auf das Verfahren Argument Person Person . Wenn ein solcher nicht existiert hat oder (manchmal falsch schreiben Sie die (value = „Persson“)), dann Frühling wird es nicht im Modell finden und leeres Person-Objekt mit seinen Vorgaben erstellen. Dann werden die Anforderungsparameter nehmen und versuchen, Daten binden sie in der Person Objekt ihre Namen.

name="Dmitrij"&countries=Lesoto&sponsor.organization="SilkRoad"&authorizedFunds=&authorizedHours=&

So wir Namen haben, und es wird binden an Person.name mit setName (String name). So in

//..Some logic with person

Wir haben Zugriff auf diesen gefüllten Namen mit dem Wert "Dimitrij".

Natürlich Frühling komplexere Objekte wie Listen binden kann, Landkarten, Liste der Sets von Karten und so weiter, aber hinter den Kulissen macht es die Daten magische Bindung.

  1. Wir können in den Argumenten mit @ModelAttribute zugleich Modell kommentierten Methode und Anforderungsmethode Handler. Dann haben wir die Regeln zur Vereinigung haben.

  2. Natürlich haben wir Tonnen von verschiedenen Situationen - @ModelAttribute Methoden können auch in einem @ControllerAdvice und so weiter ...

  3. definiert werden

Ich weiß, ich bin spät zur Party, aber ich werde zitieren, wie sie sagen, „Besser spät als nie“. Also lassen Sie uns loslegen, Jeder hat seine eigene Art und Weise, die Dinge zu erklären, lassen Sie mich versuchen, um es zusammenzufassen und einfach es für Sie in ein paar Schritte mit einem Beispiel; Angenommen, Sie haben eine einfache Form haben, form.jsp

<form:form action="processForm" modelAttribute="student">
First Name : <form:input path="firstName" /> 
<br><br>
Last Name : <form:input path="lastName" />
<br><br>
<input type="submit" value="submit"/>
</form:form>

path = "firstname" path = "lastname" Dies sind die Felder / Eigenschaften in der StudentClass wenn die Form ihrer Getter genannt wird genannt werden, aber sobald ihre Setter eingereicht werden genannt und ihre Werte werden in der Bean gesetzt, die in der modelAttribute = „Student“ in dem Formular-Tag angegeben wurde.

Wir haben StudentController, die die folgenden Methoden enthält;

@RequestMapping("/showForm")
public String showForm(Model theModel){ //Model is used to pass data between 
//controllers and views
    theModel.addAttribute("student", new Student()); //attribute name, value
return "form";
}

@RequestMapping("/processForm")
public String processForm(@ModelAttribute("student") Student theStudent){
    System.out.println("theStudent :"+ theStudent.getLastName());
return "form-details";
}

//@ModelAttribute("student") Student theStudent
//Spring automatically populates the object data with form data all behind the 
//scenes 

wir jetzt endlich eine form details.jsp

<b>Student Information</b>
${student.firstName}
${student.lastName}

auf die Frage Also zurück Was @ModelAttribute in Spring MVC ist? Eine Probe Definition aus der Quelle für Sie, http://www.baeldung.com/spring-mvc-and- the-modelattribute-Annotation Die @ModelAttribute ist eine Anmerkung, dass bindet ein Methodenparameter oder Rückgabewert der Methode zu einem Attribute Modell mit dem Namen und setzt es dann zu einer Web-Ansicht.

Was passiert eigentlich ist es, alle diejenigen, die Werte Ihrer Form bekommt von ihm unterbreiteten und dann hält sie für Sie sie an das Objekt zu binden oder zuweisen. Es funktioniert gleiche wie die @RequestParameter , wo wir nur einen Parameter erhalten und den Wert zu einem Feld zuweisen. Der einzige Unterschied ist @ModelAttribute enthält alle Daten Form anstatt eines einzelnen Parameters. Es schafft eine Bohne für Sie, die später durch den Entwickler hält verwendeten Daten Form eingereicht werden auf.

Um die ganze Sache rekapitulieren. Schritt 1 : Eine Anforderung wird gesendet und unsere Methode Showform läuft und ein Modell, eine temporäre Bean mit dem Namen Student gesetzt wird auf das Formular weitergeleitet. theModel.addAttribute ( "Student", new Student ());

Schritt 2: modelAttribute = "student" Submissionsmodell auf Formular ändert sich die Schüler und jetzt hält sie alle Parameter der Form

Schritt 3: @ModelAttribute ( "Student") Student theStudent Wir holen die Werte sind halten durch @ModelAttribute und weisen Sie die ganze Bohne / Objekt-Studenten.

Schritt 4: Und dann setzen wir es, wie wir bieten, so wie es auf der Seite usw. zeigt wie ich

Ich hoffe, es hilft Ihnen, das Konzept zu verstehen. Dank

Nehmen Sie eine beliebige Web-Anwendung, ob es Google Mail oder Facebook oder Instagram oder jede andere Web-Anwendung ist, geht es um Daten oder Informationen zwischen dem Endbenutzer und der Anwendung oder der Benutzeroberfläche und der Back-End-Anwendung auszutauschen. Auch in Spring MVC Welt gibt es zwei Möglichkeiten zum Austausch von Daten:

  1. vom Controller auf der Benutzeroberfläche und
  2. von der Benutzeroberfläche zur Steuerung.

Was interessiert uns hier, wie die Daten aus dem UI-Controller kommuniziert wird. Dies kann auch in zwei Arten erfolgen:

  1. Mit einem HTML-Formular
  2. Verwenden von Abfrage-Parameter.

Mit einer HTML-Form: Betrachten Sie die folgende Szenario

 Form Submission Darstellung

Wenn wir die Formulardaten aus dem Web-Browser senden, können wir feststellen, dass Daten in unserer Controller-Klasse als ein Objekt zuzugreifen. Wenn wir ein HTML-Formular einreichen, hat der Frühling Container vier Dinge. Es wird,

  1. Sie zuerst alle die Daten lesen, die eingereicht wird, die in der Anfrage kommt mit der request.getParameter Methode.
  2. , sobald es sie liest, wird es sie in die entsprechende Java-Typ mit konvertieren Integer.parseInt , Double.parseDouble und alle anderen Parse-Methoden, die verfügbar sind, basierend auf der Datentyp der Daten.
  3. einmal analysiert, wird es ein Ziel der Modellklasse erstellen, die wir erstellt haben. Zum Beispiel in diesem Szenario ist es die Benutzerinformationen, die eingereicht wird, und wir schaffen eine Klasse namens Benutzer, die der Container wird ein Objekt erstellen und es werden alle Werte, die in das Objekt automatisch kommen.
  4. wird es dann Übergabe, dass das Objekt durch die Werte in die Reglereinstellung.

Um diese ganze Sache an die Arbeit, werden wir bestimmte Schritte folgen müssen.

 Interner Arbeits

Wir brauchen zunächst eine Modellklasse zu definieren, wie Benutzer, in dem die Anzahl der Felder genau die Anzahl der Felder in dem HTML-Formular übereinstimmen sollte. Auch die Namen, dass wir in dem HTML-Formular verwenden, müssen die Namen übereinstimmen, dass wir in der Java-Klasse haben. Diese beiden sind sehr wichtig. Namen sollten sollte die Anzahl der Felder in der Form entsprechen die Anzahl der Felder in der Klasse entsprechen, die wir schaffen. Sobald wir das tun, wird der Container automatisch die Daten lesen, die in kommt, ein Objekt dieses Modells erzeugt, setzt die Werte und übergibt es an den Controller über. Um diese Werte in der Steuerung zu lesen, verwenden wir das @ModelAttribute Anmerkung auf die Methodenparameter. Wenn wir Methoden im Controller erstellen, werden wir die @ModelAttribute und fügen Sie einen Parameter, um es zu verwenden, die automatisch diese Aufgabe durch den Container gegeben haben.

Hier ist ein Beispiel-Code ein Benutzer für die Registrierung:

@RequestMapping(value = "registerUser", method = RequestMethod.POST)
public String registerUser(@ModelAttribute("user") User user, ModelMap model) {
    model.addAttribute("user", user);
    return "regResult";
}

Hope diese schematische Erklärung geholfen!

Dies ist für die Datenbindung Zwecke im Frühjahr MVC verwendet. Lassen Sie eine jsp haben darin ein Formularelement mit z

  

auf JSP

<form:form action="test-example" method="POST" commandName="testModelAttribute"> </form:form>

(Springform Methode, einfaches Formularelement kann auch verwendet werden)

  

Auf Steuerungsseite

@RequestMapping(value = "/test-example", method = RequestMethod.POST)
public ModelAndView testExample(@ModelAttribute("testModelAttribute") TestModel testModel, Map<String, Object> map,...) {

}

Wenn Sie nun die Formularwerte die Formularfelder einreichen werden Ihnen zur Verfügung stehen.

Anmerkung, dass bindet ein Methodenparameter oder Rückgabewert der Methode auf ein benanntes Modell Attribut zu einer Web-Ansicht ausgesetzt.

public String add(@ModelAttribute("specified") Model model) {
    ...
}

@ModelAttribute kann als die Methode Argumente / Parameter oder vor der Methodendeklaration verwendet werden.  Das primäre Ziel dieser Annotation der Anforderungsparameter oder Formularfelder an ein Modellobjekt zu binden

Ref. http://www.javabeat.net/modelattribute-spring-mvc/

@ModelAttribute wird ein Attribut mit den von Ihnen (@ModelAttribute("Testing") Test test) as Testing in dem gegebenen Beispiel angegebenen Namen erstellen, Test die Bohne Test ist den Verweis auf die Bohne und -prüfung sein wird so in Modell verfügbar sein, dass Sie weiter auf jsp Seiten zum Abruf verwenden können von Werten, die Sie gespeichert in Sie ModelAttribute.

@ModelAttribute bindet einfach den Wert von jsp Felder Pojo calss unsere Logik im Controller-Klasse. Wenn Sie mit Streben vertraut sind, dann ist dies wie das FormBean Objekt nach Vorlage bevölkern.

Die ModelAttribute Annotation als Teil einer Spring MVC Web-Anwendung verwendet wird und kann in zwei Szenarien verwendet werden.

Zunächst einmal kann es verwendet werden, um Daten in ein vorge JSP Lastmodell zu injizieren. Dies ist besonders nützlich, um sicherzustellen, dass eine JSP benötigt selbst alle Daten angezeigt werden soll. Eine Injektion wird erhalten durch ein Verfahren zum Modell verbindet.

Zweitens kann es verwendet werden, um Daten aus einem bestehenden Modell zu lesen und auf die Parameter der Methode des Trainers zuweisen.

https://dzone.com/articles/using- Feder-mvc% E2% 80% 99s

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top