ModelAndView: materialized View is [null];和Action的onSubmit()方法不被执行

来源:互联网 发布:灭佛运动 知乎 编辑:程序博客网 时间:2024/05/22 02:24

         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的方法,不好用,譬如不能后退或者用于超链接等方式的地址直接响应       

原创粉丝点击