Erste Schritte mit Formularen in Spring MVC

Erste Schritte mit Formularen in Spring MVC

1. Überblick

In diesem Artikel werden Spring-Formulare und die Datenbindung an einen Controller erläutert. Wir werden uns auch eine der Hauptanmerkungen inSpring MVC ansehen, d.h. @ModelAttribute.

Natürlich ist Spring MVC ein komplexes Thema mit vielen Dingen, die Sie verstehen müssen, um sein volles Potenzial auszuschöpfen, alsodefinitely dig deeper into the framework here.

Weitere Lektüre:

Entdecken Sie die Form Tag Library von SpringMVC

Ein kurzes Tutorial über die verschiedenen Tags, die Spring MVC zur Erstellung und Validierung von Formularen bereitstellt.

Read more

Einführung in die Verwendung von FreeMarker in Spring MVC

FreeMarker ist eine Java-basierte Template-Engine der Apache Software Foundation. Dieses Tutorial zeigt, wie Sie FreeMarker für die Verwendung in Spring MVC konfigurieren.

Read more

Einführung in die Verwendung von Thymeleaf im Frühjahr

Thymeleaf ist eine Vorlagensprache mit ausgezeichneter Integration in Spring. Dieser Artikel enthält eine Einführung in die Verwendung von Thymeleaf in einer Spring MVC-Anwendung.

Read more

2. Das Model

Zunächst definieren wira simple entity, die angezeigt und an das Formular gebunden werden sollen:

public class Employee {
    private String name;
    private long id;
    private String contactNumber;

    // standard getters and setters
}

Dies wird unser Form-Backing-Objekt sein.

3. Die Aussicht

Als nächstes definieren wirthe actual form und natürlich die HTML-Datei, die es enthält. Wir werden eine Seite verwenden, auf der ein neuer Mitarbeiter erstellt / registriert wird:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>

    
    
    
        

Welcome, Enter The Employee Details

Name
Id
Contact Number

Beachten Sie zunächst, dass wir eine Tag-Bibliothek in unsere JSP-Seite aufnehmen - die Taglibform-, um die Definition unseres Formulars zu erleichtern.

Weiter - das<form:form>-Tag spielt hier eine wichtige Rolle; Es ist dem regulären HTLM-Tag<form>ehr ähnlich, aber das AttributmodelAttributeist der Schlüssel, der einen Namen des Modellobjekts angibt, das dieses Formular unterstützt:

Dies entspricht den@ModelAttribute später in der Steuerung.

Weiter - jedes Eingabefeld verwendet ein weiteres nützliches Tag aus der Spring Form-Taglib -form: prefix. Jedes dieser Felder gibta path attribute an - dies muss einem Getter / Setter des Modellattributs entsprechen (in diesem Fall der Employee-Klasse). Beim Laden der Seite werden die Eingabefelder von Spring ausgefüllt, wodurch der Getter jedes an ein Eingabefeld gebundenen Felds aufgerufen wird. Beim Absenden des Formulars werden die Setter aufgerufen, um die Werte des Formulars im Objekt zu speichern.

Schließlich - wennthe form is submitted, wird der POST-Handler in der Steuerung aufgerufen und das Formular wird automatisch an das Argument vonemployeegebunden, das wir übergeben haben.

Basic Forms with Spring MVC

4. Der Controller

Schauen wir uns nunthe Controlleran, die das Back-End behandeln werden:

@Controller
public class EmployeeController {

    @RequestMapping(value = "/employee", method = RequestMethod.GET)
    public ModelAndView showForm() {
        return new ModelAndView("employeeHome", "employee", new Employee());
    }

    @RequestMapping(value = "/addEmployee", method = RequestMethod.POST)
    public String submit(@Valid @ModelAttribute("employee")Employee employee,
      BindingResult result, ModelMap model) {
        if (result.hasErrors()) {
            return "error";
        }
        model.addAttribute("name", employee.getName());
        model.addAttribute("contactNumber", employee.getContactNumber());
        model.addAttribute("id", employee.getId());
        return "employeeView";
    }
}

Der Controller definiert zwei einfache Vorgänge - den GET zum Anzeigen von Daten im Formular und den POST für den Erstellungsvorgang über das Senden des Formulars.

Beachten Sie auch, dass Spring sich beschwert, wenn das Objekt "employee" nicht zum Modell hinzugefügt wird, wenn wir versuchen, auf die JSP zuzugreifen, da die JSP so eingerichtet wird, dass das Formular an das Modellattribut "employee" gebunden wird:

java.lang.IllegalStateException:
  Neither BindingResult nor plain target object
    for bean name 'employee' available as request attribute
  at o.s.w.s.s.BindStatus.(BindStatus.java:141)

Um auf unser Formular-Backing-Objekt zugreifen zu können, müssen wir es über die Annotation@ModelAttributeeinfügen.

Ein "+ @ ModelAttribute +" in einem Methodenargument gibt an, dass das Argument aus dem Modell abgerufen wird. Wenn es im Modell nicht vorhanden ist, wird das Argument zuerst instanziiert und dann zum Modell hinzugefügt.

5. Umgang mit Bindungsfehlern

Standardmäßig gibt Spring MVC eine Ausnahme aus, wenn während der Anforderungsbindung Fehler auftreten. Dies ist normalerweise nicht das, was wir wollen, stattdessen sollten wir dem Benutzer diese Fehler präsentieren. Wir werden einBindingResult verwenden, indem wir eins als Argument zu unserer Controller-Methode hinzufügen:

public String submit(
  @Valid @ModelAttribute("employee") Employee employee,
  BindingResult result,
  ModelMap model)

Das ArgumentBindingResultmuss direkt hinter unserem Formularunterstützungsobjekt positioniert werden. Dies ist einer der seltenen Fälle, in denen die Reihenfolge der Methodenargumente von Bedeutung ist. Andernfalls tritt die folgende Ausnahme auf:

java.lang.IllegalStateException:
  Errors/BindingResult argument declared without preceding model attribute.
    Check your handler method signature!

Jetzt wird keine Ausnahme mehr ausgelöst. stattdessen Fehler [.brush: .java; .gutter: .true] # wird für dieBindingResult registriert, die an diesubmit-Methode übergeben werden. An diesem Punkt können wir diese Fehler auf verschiedene Arten behandeln - zum Beispiel kann der Vorgang abgebrochen werden: #

@RequestMapping(value = "/addEmployee", method = RequestMethod.POST)
public String submit(@Valid @ModelAttribute("employee")Employee employee,
  BindingResult result,  ModelMap model) {
    if (result.hasErrors()) {
        return "error";
    }

    //Do Something
    return "employeeView";
}

Beachten Sie, dass wir für den Fall, dass das Ergebnis Fehler enthält, eine andere Ansicht an den Benutzer zurückgeben, um diese Fehler korrekt anzuzeigen. Schauen wir uns diese Ansicht an -error.jsp:


    
    

    
        

Please enter the correct details

Retry

6. Anzeigen eines Mitarbeiters

Neben der Erstellung eines neuen Mitarbeiters können wir auch einfach einen anzeigen - hier ist der Schnellansichtscode dafür:


    

Submitted Employee Information

Name : ${name}
ID : ${id}
Contact Number : ${contactNumber}

Die JSP-Seite verwendet einfach EL-Ausdrücke, um die Werte der Eigenschaften des Employee-Objekts im Modell anzuzeigen.

7. Testen der Anwendung

Die einfache Anwendung kann - beispielsweise auf einem Tomcat-Server - bereitgestellt und lokal aufgerufen werden:

Dies ist die Ansicht, die das Hauptformular enthält - vor dem Übermittlungsvorgang:

Spring MVC Form example - Submit

Beispiel für ein Spring MVC-Formular - Senden

Nach dem Absenden werden die Daten angezeigt:

Spring MVC Form example - View

Beispiel für ein Spring MVC-Formular - Ansicht

Und das war's -a working example of a simple form with Spring MVC, with validation.

Die Implementierung dieses Spring MVC-Tutorials finden Sie inthe GitHub project - dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein.

Schließlich sollten Sie, wie ich gleich zu Beginn des Artikels sagte,definitely dig deeper into Spring MVC.