2017-02-12 1 views
0

Es gibt die Element Klasse:thymeleaf Verwendung auf Formulardaten an einen Controller-Post, die @ModelAttribute (komplexe Objekte) verwendet

public class Element { 

    private Long id; 
    private Name name; 

    // Getters and Setters ... 
} 

Und die Name Klasse:

public class Name { 

    private String en; 
    private String fr; 
    private String de; 

    // Getters and Setters ... 
} 

Es gibt eine getElementsController ist:

@GetMapping("/elements/create") 
public String getElementsCreate() { 
    return "private/new-element"; 
} 

Es gibt einen NewElementController Controller:

@PostMapping("/elements/create") 
    public String postElementsCreate(@ModelAttribute Element element) { 

     System.out.println(element) 
     return null; 
} 

Es ist eine Form, die Beiträge Daten an die NewElementController:

<form method="post" th:object="${element}" th:action="@{/elements/create}"> 
    <input type="text" value="1" name="id" placeholder="Id"/> 
    // How should I make the input fields for: 
     element.name.en ? 
     element.name.fr ? 
     element.name.de ? 
    <button type="submit">Save element</button> 
</form> 

die ID-Einstellung funktioniert, aber ich das name Feld nicht zugreifen können (es ist ein Objekt)
Ich habe versucht, mit th:field="*{name}" und mit th:field="*{name.en}", aber es funktioniert nicht auf diese Weise.

+2

Haben Sie model.addAttribute ("Element", neues Element()) in @GetMapping Verfahren haben ? –

+0

Ich habe jetzt die Frage mit @GetMapping-Controller aktualisiert. Muss ich da etwas setzen? – Cristian

+1

als @GurkanYesilyurt sagte, Sie müssen das neue Element-Objekt auf Ihre Karte setzen – cralfaro

Antwort

1

Versuchen folgende:

<form method="post" th:object="${element}" th:action="@{/elements/create}"> 
    <input type="text" name="id" th:value="*{id}" placeholder="Id"/> 
    <input type="text" name="name.en" th:value="*{name.en}" placeholder="Name (EN)"/> 
    <input type="text" name="name.fr" th:value="*{name.fr}" placeholder="Name (FR)"/> 
    <input type="text" name="name.de" th:value="*{name.de}" placeholder="Name (DE)"/> 
    <button type="submit">Save element</button> 
</form> 

Yor Controller-Methode für GET sollte wie folgt sein:

@GetMapping("/elements/create") 
public String getElementsCreate(Model model) { 
    Element element = new Element(); 
    Name name = new Name(); 
    element.setName(name); 
    model.addAttribute("element", element); 
    return "private/new-element.html"; 
} 
+0

Ich habe es versucht, aber es gibt mir den folgenden Fehler: 'Ausnahme Bewertung SpringEL Ausdruck:" element.name.en "(private/new-element: 37)] mit Hauptursache org.springframework.expression.spsel.SpelEvaluationException: EL1007E: Eigenschaft oder Feld 'name' kann nicht auf null gefunden werden ' – Cristian

+1

Wie gurkan sagte, haben Sie model.addAttribute ("Element", neues Element()) in @ GetMapping-Methode? – mhshimul

+0

Bitte überprüfen Sie das Update zu meiner Frage mit @GetMapping. Muss ich da etwas hinzufügen? – Cristian

Verwandte Themen