ModelAndView: materialized View is [null];
<property name="formView"><value>priceIncrease</value></property> 这一行必不可少,priceIncrease是页面的名字,他将会是prefix + priceIncrease + suffix
如果缺少该行,则报:javax.servlet.ServletException: Error in ModelAndView object or View resolution encountered by servlet with name 'pocketSpring': View to render cannot be null with ModelAndView [ModelAndView: materialized View is [null]; Model=[{priceIncrease=PriceIncrease@148e798, org.springframework.validation.BindException.priceIncrease=org.springframework.validation.BindException: BindException: 0 errors}]]
Action的onSubmit()方法不被执行
但是,要是在配置文件中加了这一行,那么会出现下面的情况: 我用的Action继承自org.springframework.web.servlet.mvc.SimpleFormController,这个类有两个属性formView和successView用于页面跳转,按一般的理解,一个Action处理完成后应该自动跳转到successView这样的页面去,除非硬编码让其跳转到其它页面。formView在这里又起什么作用呢?
我试了一下,如果没为该Action配置formView,则服务器会报错;而一旦配置了formView,则该Action的onSubmit()方法不被执行,直接跳转到formView对应的页面,更别提跳转到successView对应的页面去了——也就是说它始终跳到formView对应的页面,而且没有进行Action应该处理的动作。
我想实现的功能是在main.jsp中用一个iframe链接诸如login.do的页面,如下:
<iframe name="LoginFrame" src="login.do?color=blue" width="1000" height="600"></iframe>
Action的配置如下:
<bean id="preLoginAction" class="test.login.preLoginAction">
<property name="commandClass">
<value>test.login.preLoginForm</value>
</property>
<property name="formView">
<value>preLogin1</value>
</property>
<property name="successView">
<value>preLogin2</value>
</property>
</bean>
运行结果LoginFrame中始终是preLogin1.jsp,跟踪调试发现preLoginAction.onSubmit()方法未被执行。 GET请求的话转向formView
POST请求的话将执行onSubmit方法
如下是解决的方法:
在具体使用springMVC框架中,一般使用AbstractCommandController带参的形式,把相关的功能放在一个controller,譬如用户的添加、修改、删除,就可以采用
usemanage.do?msg=add/modify/delete的形式
SimpleFormController更为具体,但继承它实现的OnSubmit的方法,不好用,譬如不能后退或者用于超链接等方式的地址直接响应