我有一个在Spring MVC 3.2中开发并在Tomcat 7中运行的Spring MVC项目,我刚刚将它迁移到Spring MVC 4.1和Tomcat 8以支持更新的业务需求。
由于我们有一些包重组,所以包括域对象层必须更改为其他包名称,例如从com.longz.ozssc.mac.generated.domain到com.longz.ozssc.mac.generated.domain.nb。在我更改了包之后,我发现我的spring表单提交不起作用,因为表单对象仍然链接到以前的域对象。
我尝试更新我的MVC控制器,通过以下代码将模型设置为更新的包对象:
@RequestMapping("/newFirm")
public ModelAndView newFirm(@ModelAttribute("firm") Firm firm, BindingResult result, Model model) throws Exception {
ModelAndView mav = new ModelAndView("firm/editFirm.jsp","firm",new com.longz.ozssc.mac.generated.domain.nb.Firm());
mav.addObject("newFlag", true);
return mav;
}
当我尝试从JSP中检索我的模型类时,
<form:form action="${pageContext.request.contextPath}/saveFirm" method="POST" modelAttribute="firm">
<% System.out.println("ModelAttribute = |" + pageContext.findAttribute("firm")+'|'); %>
JSP打印出来:
ModelAttribute = |com.longz.ozssc.mac.generated.domain.Firm[ firmAbn=null ]|
似乎当Tomcat 8服务器执行JSP编译时仍然引用我以前的Model Object,而不是引用我的新ModelAndView在我的控制器中定义。
这个问题会导致严重的结果,因为所有字段都是&#39; value(以spring形式)将绑定到错误的模型对象(com.longz.ozssc.mac.generated.domain.Firm),并且该对象不再可访问。
任何人都对这个问题有所了解请告知。
欣赏!
修改
有关模型集和POST过程的更多详细信息:
从JSP设置和检查。
<form:form action="${pageContext.request.contextPath}/saveFirm" method="POST" modelAttribute="firm">
<% System.out.println("ModelAttribute = |" + pageContext.findAttribute("firm")+'|'); %>
通过标准化的spring-dojo提交表单:
<span class="inputbutton"><input class="savebutton" id="save" type="submit" value="<fmt:message key="navigation.save"/>"/></span>
<script type="text/javascript">Spring.addDecoration(new Spring.ValidateAllDecoration({elementId:'save', event:'onclick'}));</script>
此代码在我的其他版本的Spring MVC3.2中运行。问题是表单绑定到错误的对象。