2017-01-12 3 views
0

I haben folgende Form:Thymeleaf - unterschiedliche Menge von Parametern

<form th:action="@{'/articles/' + ${article.id} + '/processTest'}" method="post"> 
    <table> 
     <tr th:each="entry,iter: ${wordsWithTranslation}"> 
      <td><input type="text" th:value="${entry.key.value}" th:name="'q' + ${iter.index}" readonly="readonly"/> 
      </td> 
      <td> -----</td> 
      <td><input type="text" th:name="'a' + ${iter.index}"/></td> 
     </tr> 
    </table> 
    <br/> 
    <input type="submit" value="Sprawdź"/> 
</form> 

wordsWithTranslation ist ein HashMap, die unterschiedliche Menge an Elementen enthalten kann.

Und der Controller:

public String processTest(Model model, @PathVariable Long id, 
@ModelAttribute(value = "q0") String q0, 
@ModelAttribute(value = "a0") String a0, 
@ModelAttribute(value = "q1") String q1, 
@ModelAttribute(value = "a1") String a1) 

Wie kann ich das Methodenparameter beheben nicht so etwas zu tun (ModelAttribute für jedes q und einem Wert)? Gibt es eine Möglichkeit, hier eine Schleife zu machen, oder was ist die beste Lösung dafür?

Antwort

2

Set Namen der Eingänge als Namen von Array params:

<form th:action="@{'/articles/' + ${article.id} + '/processTest'}" method="post"> 
    <table> 
     <tr th:each="entry : ${wordsWithTranslation}"> 
      <td> 
       <input type="text" th:value="${entry.key.value}" name="q[]" readonly="readonly"/> 
      </td> 
      <td> -----</td> 
      <td><input type="text" name="a[]"/></td> 
     </tr> 
    </table> 
    <input type="submit" value="Sprawdź"/> 
</form> 

nun in der Steuerung Sie diese Felder als List<> oder array annehmen können:

@RequestMapping(value='/articles/{id}/processTest') 
public String someMethod(Model model, @PathVariable Long id, 
         @RequestParam(value = "q[]") List<String> qList, 
         @RequestParam(value = "a[]") List<String> aList){ 
    ... 
} 

Jedes Element der Liste q einigen entsprechen wird Element der Liste a.

+0

Es funktioniert mit RequestParam, aber mit ModelAttribute nicht. Es gibt nur 1 Element in qList und 0 in aList. – Helosze

+0

@Helosze '@ ModelAttribute' tut nichts für Bindeparameter. Diese Anmerkung zeigt nur an, dass der Parameter der Methode dem Modell mit dem angegebenen Namen hinzugefügt werden soll. Sie können '@ ModelAttribute' zwar entfernen, Werte werden jedoch trotzdem gebunden. –

Verwandte Themen