概述
一、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*方式命名,内中机理未研究
最后
以上就是落寞寒风为你收集整理的Struts2 action跳转及重复执行的全部内容,希望文章能够帮你解决Struts2 action跳转及重复执行所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复