2013-04-20 20 views
11

Il mio problema è il seguente:Come passare due oggetti da usare in una forma usando il thymeleaf?

Ho 2 oggetti diversi che devo compilare da un unico modulo.

Con 1 oggetto, faccio semplicemente nel newFoo.html:

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

e nel 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"; 
    } 

Diciamo che ho un altro bar oggetto con uno "status" variabile in esso. Come posso fare per passare quell'oggetto così posso inviare l'input nello stesso modulo?

come:

<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> 

Finora ho cercato di fare con a fieldset con un th: oggetto in esso, che non funziona, ho provato a mettere due th: oggetto in forma, che doesn Funzionano entrambi.

L'unico modo che ho trovato è quello di costruire un altro oggetto contenente questi due oggetti e passarlo. Funziona bene, ma non posso creare quel tipo di oggetto, è una sciocchezza (anche se funziona).

Ovviamente, gli oggetti non sono semplici come Foo e Bar qui, altrimenti li avrei uniti. Ma non è qualcosa che posso fare.

È persino possibile passare due oggetti come quello da utilizzare in un modulo?

Grazie già.

risposta

17

Non penso che sia necessario utilizzare due th:objects. Basta usare 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> 

penserei primavera è abbastanza intelligente, sul lato del controller, per usare le sue tecniche di mappatura per mappare i campi per il loro corretto oggetto di comando, foo o bar.

+1

Ho appena provato, e in realtà non funziona. Tutte le variabili dell'oggetto sono nulle quando le ottengo dopo l'invio. Gli oggetti risultati vincolanti sono nulli, modello lo stesso. Grazie comunque. Sembra che Spring non sia abbastanza intelligente. – brnrd

+6

Oh, è perché non abbiamo impostato un nome per loro. Il 'nome' di input deve corrispondere al nome del campo bean. –

+0

Funziona bene! Grazie mille. – brnrd

Problemi correlati