1

当我输入:http://localhost:8080/sys_manager/admin/sys/resource/update/1009 可以进入这个方法,但是id值为null,:

    @RequestMapping(value = "update/{id}", method = RequestMethod.GET)
    public String showUpdateForm(@PathVariable("id") ID id, Model model) {
        M m = baseService.findOne(id);
        if (permissionList != null) {
            this.permissionList.assertHasUpdatePermission();
        }
        setCommonData(model);
        model.addAttribute(Constants.OP_NAME, "修改");
        model.addAttribute("m", m);
        return viewName("editForm");
    }

一图千字,截图如下:https: //plus.google.com/photos/109577783306525329699/albums/6135767537581420673

4

3 回答 3

3

谢谢大家,我已经解决了这个问题,因为通过覆盖。超级方法

@RequestMapping(value = "update/{id}", method = RequestMethod.GET)
public String showUpdateForm(@PathVariable("id") ID id, Model model) {
    M m = baseService.findOne(id);
    if (permissionList != null) {
        this.permissionList.assertHasUpdatePermission();
    }
    setCommonData(model);
    model.addAttribute(Constants.OP_NAME, "修改");
    model.addAttribute("m", m);
    return viewName("editForm");
}

这个子类的方法很打击:

@Override
public String showUpdateForm(@PathVariable("id") Long id, Model model) {
    return super.showUpdateForm(id, model);
}

它会访问孩子的“showUpdateForm”(即使child'method没有@RequestMapping)。我的错误是我没有在child的方法中添加@PathVariable。

于 2015-04-10T10:36:36.870 回答
1

最简单的解决方案是像这样更改您的控制器操作

public String showUpdateForm(@PathVariable("id") Integer id, Model model) {
....

如果您真的想使用自定义类对象作为PathVariable. 那么您必须向您的控制器注册一个自定义编辑器,如下所示。

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(ID.class, new PropertyEditorSupport() {
        @Override
        public String getAsText() {
            return ((ID) this.getValue()).toString();
        }

        @Override
        public void setAsText(String text) throws IllegalArgumentException {
            setValue(new ID(text));
        }
    });
}

另请注意,您必须根据您的选择添加变量来存储在该类或此 initBinder 中解析的文本值。

于 2015-04-09T16:08:21.747 回答
0

我会使用 Spring Data JPA DomainClassConverter,这样您就可以节省 findOne 查找,例如

@RequestMapping(value = "update/{id}", method = RequestMethod.GET)
public String showUpdateForm(@PathVariable("id") M m, Model model) {

http://docs.spring.io/spring-data/jpa/docs/1.8.0.RELEASE/reference/html/#_domainclassconverter

于 2015-04-09T18:52:54.327 回答