我正在开发一个 spring mvc 项目。Name 类与性别类具有多对一的关系。我有一个 Genderformatter 来处理创建和更新名称所需的选择列表:
public class GenderFormatter implements Formatter<Gender> {
@Autowired
private GenderRepository genderRepository;
public String print(Gender gender, Locale locale) {
return gender.getId().toString();
}
public Gender parse(String id, Locale locale) throws ParseException {
Gender gender = this.genderRepository.findOne(Integer.valueOf(id));
return gender;
}
}
这是 addupdatename.jsp 的相关部分
<form:form modelAttribute="name" method="${method}"
class="form-horizontal" id="add-name-form">
...
<!-- Gender Select List -->
<spring:bind path="gender">
<c:set var="cssGroup"
value="control-group ${status.error ? 'error' : '' }" />
<div class="${cssGroup}">
<label class="control-label">Gender</label>
<div class="controls">
<form:select path="gender">
<form:option value="${name.gender.id}" label="${name.gender.gender}" />
<form:options items="${genders}" itemValue="id" itemLabel="gender" />
</form:select>
<span class="help-inline">${status.errorMessage}</span>
</div>
</div>
</spring:bind>
NameController 相关的 GET 和 POST:
@RequestMapping(value = "/names/new", method = RequestMethod.GET)
public String initCreationForm(ModelMap model) {
Name name = new Name();
model.addAttribute(name);
model.put("genders", this.nameAdminService.findGenders());
return "name/addupdatename";
}
@RequestMapping(value = "/names/new", method = RequestMethod.POST)
public String processCreationForm(@Valid Name name, BindingResult result,
SessionStatus status) {
if (result.hasErrors()) {
return "name/addupdatename";
} else {
this.nameRepository.save(name);
status.setComplete();
return "redirect:/names/" + name.getId();
}
}
这一切都很好。现在我正在为 Gender 实体添加 CRUD 函数并遇到问题。GenderController 和 jsp 对象遵循与 Name 代码相同的模式。只要将 GenderFormatter 注册为转换服务,性别表单就不会处理数据的添加或更新。我假设因为在性别添加或更新表单帖子中,格式化程序正在尝试将性别字段转换为性别对象。
有没有办法指定格式化程序应该格式化的时间或字段?