2

我正在使用 Spring MVC 开发一个测试应用程序。我有一个Person班级和一个Group班级。每个Person对象都引用一个Group对象。

现在我实现了一个显示 Person 数据并允许编辑的 jsp。在我的表单中,我放置了一个选择控件来选择 pearson 的组:

<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 回答