Привязка HashSet к элементу Input с использованием thymeleaf для дальнейшего запроса POST и обработки на стороне контроллера - PullRequest
0 голосов
/ 05 октября 2018

Скажите, пожалуйста, как правильно связать коллекцию HashSet.

Существует класс App, содержащий Set, который впоследствии создается как новый HashSet ().В контроллере есть описание метода GET, в качестве параметра модели я передаю вновь созданный экземпляр App с уже инициализированным HashSet, который имеет 1 элемент

    @RequestMapping(value = "/admin/appNew", method = RequestMethod.GET)
public ModelAndView appNew(HttpServletRequest request) throws IOException {
    ModelAndView modelAndView = new ModelAndView();
    App app = CreateNewApp();
    modelAndView.addObject("app", app);
    modelAndView.setViewName("admin/appEdit");
    return modelAndView;
}

 private App CreateNewApp() throws IOException {
    Version version = new Version();
    version.setComment("AppVersion");
    version.setNumber(0);
    version.setLicense_value(0);
    App app = new App();
    app.setName("Новое приложение");
    app.setAutor("Автор");
    app.setVersions(new HashSet<Version>());
    app.getVersions().add(version);
    return app;
}

насбоку представления я делаю итерацию для HashSet

<form th:object="${app}" th:action="@{appNew}" method="POST" class="form-signin">
        <input type="text" th:field="*{name}"  th:placeholder="Name" class="form-control" /> <br/>
        <input type="text" th:field="*{autor}"  th:placeholder="Autor" class="form-control" /> <br/>
        <input type="number" th:field="*{active}"  th:placeholder="Active" class="form-control" /> <br/>
          <div  th:object="${app}" class="card mb-4 box-shadow">
            <div th:each="ver, step :${app.versions}">
              <div th:object="${ver}">
                <input th:field="*{comment}" th:value="${ver.getComment()}" class="card-text"></input>
              </div>
            </div>
          </div>
        <button class="btn btn-lg btn-primary btn-block" name="Submit" value="create" type="Submit" th:text="Create"></button>
      </form>

Значения коллекции правильно заполняются в th: value и отображаются, но при попытке связать каждое поле через th: для последующего запроса POST,возникает ошибка

Caused by: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'ver' available as request attribute

, если вы удалите th: field = "* {comment}", тогда будет отображен список всего HashSet, но данные не попадут в контроллер, обрабатывающий запрос POSTпоскольку не будет привязки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...