我有以下课程:
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,一切看起来都没问题。
任何帮助表示赞赏! :)
您发送的邮件控制器是这样的:
personGender:gderderId
你必须这样做:
personGender.genderId:genderId
在你的HTML中使用:
个:字段= “* {personGender.genderId}”
代替
个:字段= “* {personGender}”
我认为它会对你有所帮助!