您的位置:首页 > 编程语言 > Java开发

Struts2 action跳转及重复执行

2010-06-05 13:40 453 查看
一、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为参数值。如果需要传入多个参数,则需要使用"&"代替"&"。如:

/front/getQuestionByNumber.action?number=${nextQuestionNumber}&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*方式命名,内中机理未研究
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息