我在控制器中的@ModelAttribute
方法上使用了get
注释:
@ModelAttribute
public TSetTestEmp get(@RequestParam(required=false) String id) {
TSetTestEmp entity = null;
if (StringUtils.isNotBlank(id)){
entity = tSetTestEmpService.get(id);
}
if (entity == null){
entity = new TSetTestEmp();
}
return entity;
}
已请求TSetTestEmp
这样的信息:
@RequiresPermissions("set:emp:tSetTestEmp:list")
@RequestMapping(value = {"list", ""})
public String list(TSetTestEmp tSetTestEmp, HttpServletRequest request, HttpServletResponse response, Model model) {
Page<TSetTestEmp> page = tSetTestEmpService.findPage(new Page<TSetTestEmp>(request, response), tSetTestEmp);
// model.addAttribute("tSetTestEmp", tSetTestEmp); // fixed using this.
model.addAttribute("page", page);
return "modules/set/emp/tSetTestEmpList";
}
在没有comment语句的情况下,像下面这样的JSP代码抛出一个异常:
<form:form id="searchForm" modelAttribute="tSetTestEmp" action="${ctx}/set/emp/tSetTestEmp/" method="post" class="form-inline">
<span>Employee Name:</span>
<form:input path="empName" htmlEscape="false" maxlength="64" class=" form-control input-sm"/>
</form:form>
错误
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'tSetTestEmp' available as request attribute
根据我的调试,form:input
标记会导致此异常。如果我使用input
代码并使用empName
绑定值${tSetTestEmp.empName}
,则此页面会显示正确的结果。
如果我想在JSP页面中使用form:input
标记,则必须删除list方法中的注释,这意味着我必须手动分配模型。
@M。 Deinum建议我解决这个问题并且有效:
@RequiresPermissions("set:emp:tSetTestEmp:list")
@RequestMapping(value = {"list", ""})
public String list(@ModelAttribute("tSetTestEmp") TSetTestEmp tSetTestEmp, HttpServletRequest request, HttpServletResponse response, Model model) {
Page<TSetTestEmp> page = tSetTestEmpService.findPage(new Page<TSetTestEmp>(request, response), tSetTestEmp);
model.addAttribute("page", page);
return "modules/set/emp/tSetTestEmpList";
}
但是正如我所看到的,在方法参数之前没有@ModelAttribute
的初始代码也可以到达get
方法返回的实例。但是,JSP页面无法像后端那样达到它。
我对这种情况如何发生感到困惑。
感谢您阅读,直到这里:)
任何建议都会有所帮助。