`

Struts2中redirect基本的经验之谈

阅读更多

1. redirect:action处理完后重定向到一个视图资源(如:jsp页面),请求参数全部丢失,action处理结果也全部丢失。


2. redirect-action:action处理完后重定向到一个action,请求参数全部丢失,action处理结果也全部丢失。

 
3. chain:action处理完后转发到一个action,请求参数全部丢失,action处理结果不会丢失。

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

Redirect Action Result:


   这个Result使用ActionMapperFactory提供的ActionMapper来重定位浏览器的URL来调用指定的action和(可选的)namespace.
   这个Result比ServletRedirectResult要好.因为你不需要把URL编码成xwork.xml中配置的ActionMapper提供的模式.
这就是说你可以在任意点上改变URL模式而不会影响你的应用程序. 因此强烈推荐使用这个Result而不是标准的redirect result来解决重定位到某个action的情况.


ActionName (默认) - 重定位到的action名 namespace - action的名称空间. 如果为null,则为当前名称空间

 


Redirect Result:


    调用{@link HttpServletResponse#sendRedirect(String) sendRedirect}方法来转到指定的位置.
HTTP响应被告知使浏览器直接跳转到指定的位置(产生客户端的一个新请求). 这样做的结果会使刚刚执行的action(包括action实例,action中的错误消息等)丢失, 不再可用.
这是因为action是建立在单线程模型基础上的. 传递数据的唯一方式就是通过Session或者可以为Ognl表达式的web参数(url?name=value)location (默认) - action执行后跳转的地址.
parse - 默认为true. 如果设置为false, location参数不会被当作Ognl表达式解析.

 

<result name="success" type="redirect">/displayCart.action?userId=${userId}</result>

<action   name= "delete "   class= "com.zeng.action.UserManageAction "   method= "delete "> 
    <result   type= "redirect "> list.action?pageBean.pageNumber=${pageBean.pageNumber} </result> 
</action>

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

    今天在用struts2在做项目时候,从一个action我想跳转到另一个action,并且呢得带上值。说说我的做法吧,首先你得在你的第一个action中这个id必须要有set、get方法。跳转时你的struts.xml:


    (方法一):

 

<result name="topic" type="redirect">/topicAction!findTopics.do?topicId=${topicId}</result> 

 

   (方法二):

<result name="topic" type="redirect-action"> 
<param name="actionName">findTopics</param> 
<param name="topicId">${topicId}</param> 
</result>

 

    如果是多个参数的话,继续再加几个<param>就行了,对于(方法一)如果是多个参数的怎么办?

<result name="topic" type="redirect">/topicAction!findTopics.do?topicId=${topicId}&amp;elementId=${elementId}</result> 

 

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

    使用redirect重置链接需要后缀名,使用了redirect——action就不能使用了,就例如使用chain一样,只需要写action的配置名,如果加入后缀名.action,就会报出异常,action未配置正确。

 

    键字: struts2 redirect-action 传递 参数


    在做一个系统,使用struts2框架,在提交一个请求后,将获取的数据对象再要生成一个序列号,为了防止刷新生成冗余序列号,就在请求处理完成后,直接重定向到显示该信息的action中:

 

<action name="enterpreinfo" class="preinfoBusinessAction" method="enterPreinfoSub">
<result name="success" type="redirect-action">
     showpreinfo?preinfo.order_number=${preinfo.order_number}&amp;preinfo.company_name=${preinfo.company_name}
</result>
<result name="error" type="redirect">
<param name="location">/error.jsp</param>
</result>
</action>

 

    因为使用了redirect-action,所以要注意不能将 showpreinf?preinfo.order_number=${preinfo.order_number}写成 showpreinf.action?preinfo.order_number=${preinfo.order_number}

 

    在这个配置文件里,多个参数的连接符使用了"&amp;",但XML的语法规范,应该使用"&amp;"代替"&",原理和HTML中的转义相同,开始没有注意,在struts分析配置文件时,总是报出这样的错误:

 

    The reference to entity "preinfo" must end with the ';' delimiter.

 

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

    注解方式:

 

@Results({ 
    @Result(name="input", type="redirectAction", params = {"actionName" , "resend"}) 
})

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

    struts2.1.6无论是xml还是annotation配置redirectAction时,如果要传一些参数,可是这些参数在ServletActionRedirectResult并没有声明,这时ognl会抛异常出来。但实际上传值是成功的。详见struts2的jira:


    例:

 

@Results({   
    @Result(name="reload",type="redirectAction" 
    ,params={"actionName","hello_world" 
            ,"namespace","/center/part1" 
            ,"id","09" 
            ,"count","90"})   
})

@Results({
    @Result(name="reload",type="redirectAction"
,params={"actionName","hello_world"
       ,"namespace","/center/part1"
       ,"id","09"
       ,"count","90"})
})

  


 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

dispatcher 结果类型为缺省的result类型,用于返回一个视图资源(如:jsp)

<result name="success">/main.jsp</result> 
<result name="success">/main.jsp</result> 

 

    以上写法使用了两个默认,其完整的写法为:

 

<result name="success" type="dispatcher"> 
     <param name="location">/maini.jsp</param> 
</result> 

 
    location只能是页面,不能是另一个action(可用type="chain"解决)。

 

    redirect 结果类型用于重定向到一个页面,另一个action或一个网址。

<result name="success" type="redirect">aaa.jsp</result> 
<result name="success" type="redirect">bbb.action</result> 
<result name="success" type="redirect">www.baidu.com</result>

 

   redirect-action 结果类型使用ActionMapperFactory提供的ActionMapper来重定向请求到另外一个action

   

<result name="err" type="redirect-action"> 
    <param name="actionName">重定向的Action名</param> 
     <param name="namespace">重定向Action所在的名字空间</param> 
</result>

 

    redirect和redirect-action两种结果类型在使用上其实并没有什么区别,只是写法不同而已。

 

    chain 用于把相关的几个action连接起来,共同完成一个功能。

 

<action name="step1" class="test.Step1Action"> 
     <result name="success" type="chain">step2.action</result> 
</action> 
<action name="step2" class="test.Step2Action"> 
<result name="success">finish.jsp</result> 
</action> 

 

   处于chain中的action属于同一个http请求,共享一个ActionContext

 

    plaintextj 结果类型用于直接在页面上显示源代码

 

<result name="err" type="plaintext"> 
    <param name="location">具体的位置</param> 
    <param name="charSet">字符规范(如GBK)</param> 
</result>

  

分享到:
评论
6 楼 默默pig 2014-07-21  
楼主,您好。有个语法想问一下:

引用你原文中“<result name="topic" type="redirect">/topicAction!findTopics.do?topicId=${topicId}</result>”,其中的"/topicAction"是命名空间吗?其后的“!”  表示什么意思?
5 楼 Andrew0721 2013-06-17  
road_16 写道
楼主你好,你说到
redirect:action处理完后重定向到一个视图资源(如:jsp页面),请求参数全部丢失,action处理结果也全部丢失。
今天我做了下简单测试,发现参数可以在页面接收,以下是我的代码

<action name="test" class="com.action.UploadAction">
<result type='redirect' name="test">/test.jsp?name="tao"</result>
</action>
我在test.jsp是这样接收参数
<% String name = request.getParameter("name");

   System.out.println(<result type='redirect' name="test">/test.jsp?name="tao"</result>
);
%>
控制台输出结果:tao,楼主能否解释一下呢?



你重定向以后,把参数都传过去了,肯定能取道啊?重定向后参数全部丢失,指的是之前哪个请求的参数将全部丢失,如果你改成<result type='redirect' name="test">/test.jsp?name="tao"</result>,页面肯定获取不到name的值。
4 楼 zhengkunsheng 2013-03-27  
 
3 楼 road_16 2012-09-20  
楼主你好,你说到
redirect:action处理完后重定向到一个视图资源(如:jsp页面),请求参数全部丢失,action处理结果也全部丢失。
今天我做了下简单测试,发现参数可以在页面接收,以下是我的代码

<action name="test" class="com.action.UploadAction">
<result type='redirect' name="test">/test.jsp?name="tao"</result>
</action>
我在test.jsp是这样接收参数
<% String name = request.getParameter("name");

   System.out.println(name);
%>
控制台输出结果:tao,楼主能否解释一下呢?

2 楼 fool2011 2012-08-01  
很详细,学习了……
1 楼 padangel 2012-05-15  
非常棒,狠好的文章

相关推荐

    struts2中result类型之redirect

    struts2中result类型之redirect,重定向

    struts1和struts2的区别

    struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别...

    struts2开发基本包

    struts2开发基本需求包 欢迎下载

    struts2中要引入的基本jar包

    struts2中要引入的基本jar包 struts2中要引入的基本jar包 struts2中要引入的基本jar包

    struts2帮助文档

    struts2中的国际化 struts2转化器 struts2实现表单数据校验 struts2的基石-拦截器 struts2中实现IOC struts2中实现文件上传 struts2中实现CRUD struts2中的OGNL struts2的新表单标志的使用 struts2与AJAX一 struts2...

    Struts2基本原理

    Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务... Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。

    struts2基本jar包

    struts2基本jar包

    struts2 基本jar包

    struts2所需基本jar包

    struts2基本类库

    struts2基本类库

    Struts2中文教程,Struts2API

    Struts2中文教程,Struts2API

    struts2_ognl基本用法.doc

    struts2_ognl基本用法.docstruts2_ognl基本用法.docstruts2_ognl基本用法.docstruts2_ognl基本用法.docstruts2_ognl基本用法.docstruts2_ognl基本用法.docstruts2_ognl基本用法.docstruts2_ognl基本用法.docstruts2_...

    Struts2视频教程

    Struts2是一套非常优秀的Java WEB应用框架,实现优雅、功能强大、使用简洁。目前已有大量的企业项目采用Struts2来作为Web框架进行开发,掌握Struts2是每个进行Web开发的Java程序员的一项必备技能。 本视频对Struts2...

    struts2 总结工程大全

    struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全...

    struts2-core.jar

    struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...

    struts2 资料struts2 资料struts2 资料struts2 资料

    struts2 资料struts2 资料struts2 资料struts2 资料

    struts2中result类型之redirectAction

    struts2中result类型之redirectAction

    struts2官方文档

    struts2官方文档

    struts2中文学习文档

    struts2的根本webwork2

    Struts 2中文帮助文档

    Struts 2是Struts的下一代产品,是在 struts 和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理...

    struts2需要的基本jar包

    struts2需要的基本的5个jar包,如果有需要可以下载,还有三大框架的jar包,我也有

Global site tag (gtag.js) - Google Analytics