对Spring MVC中的@ModelAttribute注释感到困惑

时间:2016-07-26 04:12:30

标签: java spring jsp spring-mvc modelattribute

我在控制器中的@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页面无法像后端那样达到它。

我对这种情况如何发生感到困惑。

感谢您阅读,直到这里:)

任何建议都会有所帮助。

0 个答案:

没有答案