2

Spring MVC を使用してテスト アプリケーションに取り組んでいます。私にはPersonクラスとGroupクラスがあります。すべてPersonのオブジェクトはオブジェクトを参照しGroupます。

ここで、Person データを表示して編集できる JSP を実装しました。フォーム内に、ピアソンのグループを選択するための選択コントロールを配置します。

<sf:select path="group">
    <sf:options items="${groupList}" itemLabel="name" itemValue="id" />
</sf:select>

ページをロードすると正しいグループが表示されますが、コントローラーではグループidを表す文字列しか取得できないため、変更を保存できません。

Groupだから、私の質問は次のとおりです。コントローラーでIDの代わりにオブジェクトを取得するにはどうすればよいですか?

更新 ここに私のコントローラコード:

@RequestMapping(value = "/details", params = "save", method = RequestMethod.POST)
public String save(@ModelAttribute("person") Person p,
        BindingResult result) {
    this.personManager.savePerson(p);
    return "redirect:/people/details?id=" + p.getId();
}
4

1 に答える 1

6

PropertyEditorSupport を拡張して、独自の GroupEditor (グループ オブジェクト インスタンスを正しく設定する) を作成します。次に、それをコントローラーにバインドします。

@InitBinder
protected void initBinder(WebDataBinder binder)     {
      binder.registerCustomEditor(Group.class, new GroupEditor(groupService));
}

実際のエディターは次のようになります。

public class GroupEditor extends PropertyEditorSupport{

    private final GroupService groupService;

    public GroupEditor(GroupService groupService){
        this.groupService= groupService;
    }

    @Override
    public void setAsText(String text) throws IllegalArgumentException {
      Group group = groupService.getById(Integer.parseInt(text));
      setValue(group);
    }
}

春のドキュメント

于 2012-04-13T09:56:31.547 に答える