2017-01-12 13 views
0

У меня есть этот вид:Thymeleaf - разное количество параметров

<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 является HashMap, который может содержать различное количество элементов.

И контроллер:

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) 

, как я могу установить, что параметры метода не делать что-то подобное (ModelAttribute для каждого ц и значение)? Есть ли способ сделать что-то вроде цикла здесь или что является лучшим решением для этого?

ответ

2

Установить имена входов в качестве имен 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> 

Теперь в контроллере вы можете принять это поля, как List<> или array:

@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){ 
    ... 
} 

Каждый элемент списка q будет соответствовать некоторым пункт списка a.

+0

Он работает с RequestParam, но с ModelAttribute нет. В qList и 0 в aList есть только 1 элемент. – Helosze

+0

@Helosze '@ ModelAttribute' ничего не делает для параметров привязки. Эта аннотация просто указывает, что параметр метода должен быть добавлен к модели с указанным именем. Вы можете удалить '@ ModelAttribute' вообще, но значения все равно будут связаны. –

 Смежные вопросы

  • Нет связанных вопросов^_^