私は春のmvcプロジェクトに取り組んでいます。Name クラスは、gender クラスと多対 1 の関係にあります。名前の作成と更新に必要な選択リストを処理する 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 が変換サービスとして登録されている限り、性別フォームはデータの追加または更新を処理しません。性別の追加または更新フォームの投稿で、フォーマッターが性別フィールドを性別オブジェクトに変換しようとしているためだと思います。
フォーマッタがいつ、どのフィールドをフォーマットする必要があるかを指定する方法はありますか?