it-swarm.com.de

Wie übergebe ich zwei Objekte, die in einem Formular mit thymeleaf verwendet werden sollen?

Mein Problem ist folgendes:

Ich habe 2 verschiedene Objekte, die ich aus einem einzigen Formular ausfüllen muss.

Mit 1 Objekt mache ich einfach in der newFoo.html:

<form th:object="${foo} th:action="@{/foo}" method="post">
    <input type="text" th:field="*{name}"/>
    <button type="submit">Go</button>
</form>

und im FooController:

@RequestMapping(value = "/foo/new", method = RequestMethod.GET) 
public String newFoo(final Foo foo, Model model) { 
    return "newFoo"; 
} 

@RequestMapping(value = "/foo/new", method = RequestMethod.POST) 
public String saveFoo(final Foo foo, final BindingResult bindingResult, Model model) { 
    fooService.save(foo); 
    return "redirect:/foo/new"; 
} 

Angenommen, ich habe eine andere Objektleiste mit einer "Status" -Variablen. Wie kann ich dieses Objekt übergeben, damit ich die Eingabe im selben Formular übermitteln kann?

Mögen:

<form th:object="${foo} && ${bar}" th:action="@{/foo}" method="post">
    <input type="text" th:field="*{name}"/>
    <input type="text" th:field="*{status}"/>
    <button type="submit">Go</button>
</form>

Bisher habe ich versucht, ein Feldset mit einem th: -Objekt zu erstellen, das nicht funktioniert. Ich habe versucht, zwei th: -Objekte in das Formular einzufügen, das auch nicht funktioniert.

Die einzige Möglichkeit, die ich gefunden habe, besteht darin, ein anderes Objekt zu erstellen, das diese beiden Objekte enthält, und es zu übergeben. Das funktioniert gut, aber ich kann so ein Objekt nicht erstellen, es ist Unsinn (auch wenn es funktioniert).

Natürlich sind die Objekte hier nicht so einfach wie Foo und Bar, sonst hätte ich die beiden zusammengeführt. Aber das kann ich nicht.

Ist es überhaupt möglich, zwei solche Objekte in einem Formular zu übergeben?

Danke schon mal.

15
brnrd

Ich denke nicht, dass Sie zwei th:objects verwenden müssen. Verwenden Sie einfach th:value

<form th:action="@{/foo}" method="post">
      <input type="text" th:value="${foo.name}" name="name"/>
      <input type="text" th:value="${bar.status}" name="status"/>
      <button type="submit">Go</button>
</form>

Ich denke, Spring ist auf der Controller-Seite klug genug, seine Mapping-Techniken zu verwenden, um Ihre Felder auf das richtige Befehlsobjekt (Foo oder Bar) abzubilden.

19

ich benutzte ein div-Tag, um die Formulareingabe für mein zweites Objekt zu umgeben, und fügte ein th: object hinzu. Der Controller hat es verarbeitet und der Datenbank hinzugefügt. 

<form method=post th:object="${object1}" >
   <div th:object="${object2}" >

      code......

   </div> 
   <input type="submit" />
</form>
1
KevinG