Как перенести список строк в DTO с помощью Thymeleaf - PullRequest
0 голосов
/ 05 июня 2018

Я занимаюсь разработкой приложения Spring + Thymeleaf.Я реализую поиск с несколькими параметрами.У меня есть форма с соответствующим DTO.Вот код DTO:

public class ClassSearchDto {
   private String searchParam;
   private Long programId;
   private List<String> teacherNames;
   //getters, setters and constructor are omitted
}

Как видите, у меня есть список строк в моем DTO, который называется teacherNames.Вот как я отображаю свою форму:

 <form th:action="@{/classes/search}" method="get" th:object="${classSearchDto}">

    <div class="form-group">
       <input type="hidden" class="form-control"
          th:value="${classSearchDto.programId}" th:field="*{programId}"/>

       <label for="searchParam">Search</label>
       <input type="text" class="form-control" id="searchParam" placeholder="keyword"
                                       th:value="${classSearchDto.searchParam}" th:field="*{searchParam}"/>
       <div>
          <th:block th:each="name, iter ${classSearchDto.teacherNames}">
              <input th:value="${name}" th:field="*{teacherNames[__${iter.index}__]}/>
          </th:block>
       </div>

   </div>
   <button class="btn btn-default" type="submit">Find</button>

   </form>

Я хочу реализовать свой поиск с помощью аннотации @RequestParam на серверной части.Это мой контроллер:

 @RequestMapping(value = "/search")
 public String findClassByName(@RequestParam("searchParam") final String searchParam,
                              @RequestParam("programId") final Long programId,
                              @RequestParam("teacherNames") final List<String> teacherNames,
                              final Model model) {
 ...
 }

Проблема в том, что я не могу получить список имен учителей таким образом.Я получаю это исключение:

 org.springframework.web.bind.MissingServletRequestParameterException:Required List parameter 'teacherNames' is not present

Не могли бы вы помочь мне перенести список элементов в DTO на мой сервер с таким подходом?Может быть, вы знаете, как это сделать правильно по-другому.Заранее спасибо.

1 Ответ

0 голосов
/ 06 июня 2018

Я могу предложить вам одну вещь, я не знаю, работает ли она или нет.Попробуйте изменить

public String findClassByName(@RequestParam("searchParam") final String searchParam,@RequestParam("programId") final Long programId,@RequestParam("teacherNames") final List<String> teacherNames,final Model model)

на

public String findClassByName(@ModelAttribute("classSearchDto")  ClassSearchDto classSearchDto,@RequestParam("searchParam") String searchParam,@RequestParam("programId") Long programId,@RequestParam("teacherNames")  List<String> teacherNames,Model model) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...