Thymeleaf + Spring: 2 объекта в форме перезаписывают идентификаторы - PullRequest
0 голосов
/ 23 января 2020

Я использую Spring Boot (v2.0.1.RELEASE) . У меня проблема в шаблоне HTML, я пытаюсь отправить 2 разных объекта в форме контроллеру. Все атрибуты объектов формы отправляются успешно, за исключением атрибута ID обоих. Оба имеют поле с именем ID, которое перезаписывается при поступлении в контроллер.

То есть форма в HTML:

<form action="#" th:action="@{/test}" method="post" class="form floating-label">
     <div class="form-group">

          <!-- TEST VARIABLES -->
          <input type="text" th:field="${test.id}" class="form-control"/>
          <input type="text" th:field="${test.nombre}" class="form-control"/>
          <input type="text" th:field="${test.formatotest.id}" class="form-control"/>
          <input type="text" th:field="${test.formatotest.nombre}" class="form-control"/>
          <input type="text" th:field="${test.activo}" class="form-control"/>

          <!-- USER VARIABLES-->
          <input type="text" th:field="${user.id}" class="form-control"/>
          <input type="text" th:field="${user.email}" class="form-control"/>
          <input type="text" th:field="${user.username}" class="form-control"/>

     </div>
     <div>
          <input type="submit" value="Send" class="btn btn-primary btn-raised" />
     </div>
     <br>
</form>

Функция контроллера:

@PostMapping("/test")
   public ModelAndView showTest(Test test, User user) {

       System.out.println(" * User ID: ["+user.getId()+"] Test ID:["+test.getId()+"]");

       ModelAndView testModel = new ModelAndView("test");
       testModel.addObject("user",user);
       testModel.addObject("test",test);

       return testModel;
   }

Когда я печатаю оба идентификатора, они отображаются одинаково для них обоих. Я попытался использовать th: value, name nad id вместо th: field, и он все еще не удался.

Вторая попытка формы HTML:

<form action="#" th:action="@{/test}" method="post" class="form floating-label">
    <div class="form-group">

         <!-- TEST VARIABLES -->
         <input type="hidden" th:value="${test.id}" name="id" id="id" class="form-control"/>
         <input type="hidden" th:value="${test.nombre}" name="nombre" id="nombre" class="form-control"/>
         <input type="hidden" th:value="${test.formatotest.id}" name="formatotest.id" id="formatotest.id" class="form-control"/>
         <input type="hidden" th:value="${test.formatotest.nombre}" name="formatotest.nombre" id="formatotest.nombre" class="form-control"/>
         <input type="hidden" th:value="${test.activo}" name="activo" id="activo" class="form-control"/>

         <!-- USER VARIABLES-->
         <input type="hidden" th:value="${user.id}" name="id" id="id" class="form-control"/>
         <input type="hidden" th:value="${user.email}" name="email" id="email" class="form-control"/>
         <input type="hidden" th:value="${user.username}" name="username}" id="username" class="form-control"/>

    </div>
    <div>
         <input type="submit" value="Send" class="btn btn-primary btn-raised" />
    </div>
    <br>
</form>

Любопытно, что это зависит от того, какой вход я поставлю первым в HTML, который будет установлен для них обоих.

1 Ответ

0 голосов
/ 24 января 2020

Я нашел ответ, не так, как должно быть, но он работает нормально. Поскольку я не смог отправить оба объекта, я создал третий объект, содержащий оба идентификатора, и передал эти 3 объекта контроллеру, как показано ниже.

Новый объект, содержащий оба идентификатора:

package app.TestUser;

import app.hibernate.User;
import app.hibernate.Test;

public class TestUser {

    private String user_id;
    private String test_id;

    public TestUser() {
    }

    public TestUser(String user_id, String test_id) {
        this.user_id = user_id;
        this.test_id = test_id;
    }

    public String getUser_id() {
        return this.user_id;
    }

    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }

    public String getTest_id() {
        return this.test_id;
    }

    public void setTest_id(String test_id) {
        this.test_id = test_id;
    }

}

Контроллер метод:

public ModelAndView showTest(TestUser testuser, Test test, User user) {

        user.setId(Integer.parseInt(testuser.getUser_id()));
        test.setId(Integer.parseInt(testuser.getTest_id()));

        ModelAndView testModel = new ModelAndView("test");

        testModel.addObject("user",user);
        testModel.addObject("test",test);

        return testModel;
    }

HTML Форма:

<form action="#" th:action="@{/test}" method="post" class="form floating-label">
     <div class="form-group">

          <!-- TEST VARIABLES -->
          <input type="hidden" th:field="${testuser.test_id}"/>
          <input type="hidden" th:field="${test.nombre}"/>
          <input type="hidden" th:field="${test.formatotest.id}"/>
          <input type="hidden" th:field="${test.formatotest.nombre}"/>
          <input type="hidden" th:field="${test.activo}" name="activo"/>

          <!-- USER VARIABLES-->
          <input type="hidden" th:field="${testuser.user_id}"/>
          <input type="hidden" th:field="${user.email}"/>
          <input type="hidden" th:field="${user.username}"/>

     </div>
     <div>
          <input type="submit" value="Send" class="btn btn-primary btn-raised" />
     </div>
     <br>
</form>

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