Struts2 s:action标签不执行

      项目中用到Struts2框架的s:action标签,具体什么意思,怎么用,在这就不多说了,网上很多介召,这里主要说一下用s:action标签所遇到的一个问题:

      Question-A :在主页面里包含s:action标签,首次加载主页面时,s:action可以正确执行(请求后台Action),并返回执行结果,这时submit主页面,并将执行结果再次返回到主页面,这时发现s:action不执行(还是上次的执行结果 )。

 

      经分析,原因可能如下:

      R-A: 猜测可能是web服务器,tomcat对页面代码进行了缓存,所以没有再次去请求被包含的s:action。于是在每次执行s:action时,添加一个随机数,如下:

<s:param name="tag"><s:property value="model.tag"/></s:param>

经过测试问题解决。

 

      网上还有一种s:action标签不执行的情况,如下:
      Question-B :提交表单 -> 服务器对表单数据进行验证(使用Struts2的validation框架) -> 验证错误,返回INPUT页面。逻辑很简单,问题出在当验证失败返回到INPUT页面时,这个页面包含的<s:action>标签不执行。

      <s:action>标签允许在JSP页面中直接调用Action,并可以将这个Action执行后返回的资源加载到此页面中。
我的这个INPUT页面包含两部分,左边是由<s:action>返回的一个列表页面,右边是表单页面。经过研究发现,的确是由于表单验证失败造成的。

 

      Struts2在执行action方法前,都要先执行validateXXX()和 validate()方法来进行表单验证,由于我这里使用了表单验证机制,所以如果在验证时发现错误,则会将错误信息放入filedError中,并跳过 action方法,直接返回到INPUT指定的视图中。

 

      这样,当返回INPUT视图后,视图中再通过<s:action>去请求另一个 action时,会将之前filedError一起带入到这个action中,这个action(即newsList)同样也需要调用validate方法进行验证,当发现了存在filedError后,就会立即返回到这个action指定的input视图中,而并不执行这个action的逻辑方法。因此,也就出现了上面的action执行失败的问题了。

     

      R-B: 既然是由于发现filedError造成的,那么要解决这个问题,只需要写一个校验newsList action的方法,并在这个方法中将filedError清除就可以了。这样,当struts调用这个action的校验方法时,将错误清除,这样就可以继续向下执行这个action了。于是,左边的列表页面又显示出来了。

 

      参考连接:http://tangshuo.iteye.com/blog/549842

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值