Struts2 action跳转及重复执行

一、action跳转

1、在不使用chain的情况下,从一个action进入另一个action

 

解决方案1:使用redirectAction方式。例子如下:

<action name="insertAnswer" class="answerAction" method="insertAnswer">
      <result name="success" type="redirectAction">
           <param name="actionName">getQuestionByNumber</param>
           <param name="namespace">/front</param>
<!--  需要传入第二个action的请求参数number,其值为nextQuestionNumber。下面取值的写法使用JSTL方式。 -->

<!--  如果有多个参数,则添加多个 <param/>标签  -->

           <param name="number">${nextQuestionNumber}</param>
   </result>
  <result name = "error">/error.jsp</result>
</action>

   

解决方案2:使用redirect方式。例子如下:

<action name="insertAnswer" class="answerAction" method="insertAnswer">
   <result name="success" type="redirect">
    /front/getQuestionByNumber.action?number=${nextQuestionNumber}
   </result>
 <result name = "error">/error.jsp</result>
</action>

同理。number为参数,nextQuestionNumber为参数值。如果需要传入多个参数,则需要使用"&amp;"代替"&"。如:

/front/getQuestionByNumber.action?number=${nextQuestionNumber}&amp;endTime=${endTime}

1、一个action在不同的条件下有两个不同的跳转

解决方案1:在struts.xml中定义两个不同名但在同一命名空间的action,调用的方法也一样。如下:

<action name="insertAnswer" class="answerAction" method="insertAnswer">

  ...

</action>

 

<action name="lastInsertAnswer" class="answerAction" method="insertAnswer">

  ...

</action>

解决方案2:在struts.xml中定义一个action,但拥有至少两个<result/>,这两个result要拥有不同的跳转。在action的Java类中,根据传入的参数不同,在同一个action中逻辑处理结束需要返回字符串值时,做一个判断,进入不同的结束字符串。例子如下:

<action name="insertAnswer" class="answerAction" method="insertAnswer">

  <!--  第一个跳转 -->

  <result name="success" type="redirect">
    /front/getQuestionByNumber.action?number=${nextQuestionNumber}
   </result>
   

<!--  第二个跳转 -->
   <result name="end" type="redirect">
    /front/updateExaminee.action?end=${endTime}
   </result>

 

   <result name = "error">/error.jsp</result>
 </action>

 

二:action重复执行

错误思想:原因为定义了两个相同方法但不同名的action。

正确想法:form中是否使用了submit按钮,但在该按钮还有一个onclick事件,该事件触发一个JavaScript方法,该方法又一次提交form。这样会导致action执行两次。

 

查询得到的一些有结论:

1.  json格式下, firefox中的yslow插件会发送第二个 HTTP GET 请求得到页面的信息.

2.  ajax模式下,调用的action方法不能为get*方式命名,内中机理未研究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值