2013-04-20 8 views
11

Mój problem jest następujący:Jak przekazać dwa obiekty do użycia w formularzu za pomocą thymeleaf?

Mam 2 różne obiekty, które muszę wypełnić z pojedynczego formularza.

z 1 obiektu, po prostu zrobić w newFoo.html:

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

aw 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"; 
    } 

powiedzmy mam inny bar obiekt o "status" zmienna w nim. Jak mogę zrobić, aby przekazać ten obiekt, aby móc przesłać dane wejściowe w tym samym formularzu?

odczuwalna:

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

Do tej pory starałem się zrobić z do fieldset z th: obiekt w nim, że nie działa, starałem się umieścić dwa th: obiekt w formularzu, że nie robi nie działa.

Jedyny sposób, jaki znalazłem, to zbudowanie innego obiektu zawierającego te dwa obiekty i przekazanie go. To działa dobrze, ale nie mogę stworzyć tego rodzaju obiektu, to bzdura (nawet jeśli działa).

Oczywiście obiekty nie są tak proste jak Foo i Bar, w przeciwnym razie scaliłbym te dwa. Ale to nie jest coś, co mogę zrobić.

Czy można przekazać dwa takie obiekty w formularzu?

Dzięki już.

Odpowiedz

17

Nie sądzę, że musisz użyć dwóch th:objects. Wystarczy użyć 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> 

Myślę Wiosna jest wystarczająco inteligentny, po stronie kontrolera, aby wykorzystać swoje techniki mapowania do mapowania pól do ich właściwym przedmiotem polecenia, Foo lub barze.

+1

Po prostu próbowałem, a właściwie to nie działa. Wszystkie zmienne obiektu mają wartość NULL, gdy otrzymam je po przesłaniu. Obiekty wiążące wyniki są puste, Modeluj to samo. Dzięki i tak. Wygląda na to, że Spring nie jest wystarczająco inteligentny. – brnrd

+6

To dlatego, że nie ustaliliśmy dla nich nazwy. Wejście "nazwa" musi pasować do nazwy pola fasoli. –

+0

Działa dobrze! Dziękuję Ci bardzo. – brnrd