Передать объект из Select в Thyemleaf - PullRequest
0 голосов
/ 27 марта 2019

У меня есть следующий класс:

public class Person {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "person_id")
   private int personId;

   @Column(name = "person_name", unique = true)
   private String personName;

   @Column(name = "gender")
   private Gender personGender;
}

А вот и пол:

public class Gender{

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "gender_id")
   private int genderId;

   @Column(name = "gender_name", unique = true)
   private String genderName;
}

Я создал выпадающее меню Thymelef при создании нового персонажа, который выглядит следующим образом:

@RequestMapping(value = ("/newPerson"), method = RequestMethod.GET)
   public ModelAndView createPerson() {
      ModelAndView model = new ModelAndView();

      Person person= new Person ();
      model.addObject("person", person);

      List<Gender> genders= genderService.getAll();
      model.addObject("genders", genders);

      model.setViewName("user/newPerson");

      return model;
   }

(Я понимаю, что это выглядит глупо, но это упрощенная версия моего кода.)

А вот и HTML:

<form class="form-createNew" role="form" method="POST" 
  th:action="@{/newPerson}" th:object="${person}">

   <div class="form-row">
     <div class="col">
       <div class="form-label-group">
          <input type="text" th:field="*{personName}" id="personName" class="form-control" placeholder="Person name">
       </div>
      </div>
   </div>

   <div class="form-row">
     <div class="col">
       <div class="form-label-group">
         <select th:field="*{personGender}" class="form-control" 
            id="personGender" name="personGender">
           <option value="" selected disabled hidden>Select gender</option>
           <option th:each="gender: ${genders}"
                   th:value="${gender.genderId}"
                   th:text="${gender.genderName}"></option>
         </select>
        </div>
       </div>
     </div>
    <button id="registerBtn" class="btn btn-lg btn-primary btn-block shadow-none text-uppercase" type="submit"> Create </button>
    </form>

И, наконец, мой вопрос:

То, что я получаю методом POST в контроллере для / newPerson, это объект Person со значением из поля ввода, но NULL для рода. Что вызывает это и где я здесь не прав? Я проходил подобные вопросы на SO в отношении этой проблемы, а также на Thymeleaf Docs / Baeldung, и все выглядит хорошо для меня.

Любая помощь приветствуется! :)

1 Ответ

0 голосов
/ 29 марта 2019

Вы отправляете на свой пост-контроллер что-то вроде этого:

personGender: gernderId

Вы должны сделать:

personGender.genderId: sexId

Для этого используйте в своем html:

й: поле = "* {personGender.genderId}"

вместо

* * Й тысяча двадцать-одиной: поле = "* {personGender}" * * тысяча двадцать-дв

Думаю, это вам поможет!

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