当我输入时: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
答案 0 :(得分:2)
谢谢大家,我已经解决了这个问题,因为它被覆盖了。 超级方法
@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"(即使孩子'方法没有@RequestMapping)。我的错误是我没有添加@PathVariable在孩子的方法中。
答案 1 :(得分:0)
最简单的解决方案是像这样改变你的控制器动作
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));
}
});
}
另请注意,您必须添加avariable以存储在该类内或在此initBinder内解析的文本值,如您所愿。
答案 2 :(得分: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