1

我正在开发一个 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 注册为转换服务,性别表单就不会处理数据的添加或更新。我假设因为在性别添加或更新表单帖子中,格式化程序正在尝试将性别字段转换为性别对象。

有没有办法指定格式化程序应该格式化的时间或字段?

4

0 回答 0