朋友们,不好意思,最近许多事情赶一块儿了,没能及时更新博客,还望各位多多包涵~下面接着谈Struts2的内容。今天想跟大家分享的是Struts2中Result的一些学习中遇到的问题。
reslut标签的作用,我想通过字面意思,大家都能理解:对action的响应结果的处理。它一共有四种常用的类型,下面一一为大家介绍:
1.dispatcher(默认类型,在服务器端实现跳转)
其写法一般是 :
<action name="user" class="com.struts2.user.action.UserAction">
<result>/user_add_success.jsp</result>
</action>
其中,<result> 。。。</result>的写法,隐含了执行方法的返回值为“SUCCESS”,其完整写法应为:<result="SUCCESS"> 。。。</result>。
这种类型的reslut的是在服务器端实现跳转,其后不能再是Action了(若要实现此功能,使用chain类型),只能是某个jsp页面或者html等。
2.redirect
也就是重定向了。与dispatcher不同的是,redirect实现的是在客户端(浏览器)实现的跳转,因为此时相当于客户端又重新向服务器端发起了一次请求。被跳转的页面中丢失传递的信息。这是因为action的设计模式是基于单线程的,如果要为被跳转的页面传递参数,就只有使用session或者在url地址中传入参数。
3.chain
可以实现从一个antion到另一个action的跳转。主要用于把相关的几个action连接起来,共同完成一个功能。
43 | # <action name= "step1" class = "test.Step1Action" > |
44 | # <result name= "success" type= "chain" >step2.action</result> |
45 | # </action> |
46 | # |
47 | # <action name= "step2" class = "test.Step2Action" > |
48 | # <result name= "success" >finish.jsp</result> |
49 | # </action> |
50 | |
51 | ( 2 )实现方式: |
52 | |
53 | 查看execute()方法,主要思想如下: |
54 | |
55 | // 根据Action名称finalActionName及要调用的方法finalMethodName来new一个代理对象proxy,并执行之 |
56 | # proxy = actionProxyFactory.createActionProxy(finalNamespace, |
57 | # finalActionName, finalMethodName, extraContext); |
58 | # proxy.execute(); |
4.redirect-action
当使用type=“redirectAction” 或type=“redirect”提交到一个action并且需要传递一个参数时。这里是有区别的:
使用type=“redirectAction”时,结果就只能写Action的配置名,不能带有后缀:“.action”。
因为后边两种在实际的开发过程中应用并不是太广泛,因此知道就可以了,用到的时候再查也不会太晚。
好了,今天跟大家分享的就是这些了。洗洗睡了,明天上班。各位,晚安咯~!