从Thymeleaf的Select中传递一个对象

问题描述 投票:0回答:1

我有以下课程:

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;
}

在创建一个如下所示的新Person时,我已经组装了一个Thymeleaf下拉菜单:

@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>

最后我的问题是:

我在/ newPerson的控制器中的POST方法接收的是一个Person对象,其值来自输入字段,但为Gender的NULL。造成这种情况的原因以及我在哪里错了?关于这个问题我也经历了类似的问题,还有Thymeleaf Docs / Baeldung,一切看起来都没问题。

任何帮助表示赞赏! :)

spring spring-mvc thymeleaf
1个回答
0
投票

您发送的邮件控制器是这样的:

personGender:gderderId

你必须这样做:

personGender.genderId:genderId

在你的HTML中使用:

个:字段= “* {personGender.genderId}”

代替

个:字段= “* {personGender}”

我认为它会对你有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.