zoukankan      html  css  js  c++  java
  • 配置文件Struts.xml 中type属性 redirect,redirectAction,chain的区别

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

     

    redirectAction Result:
        这个Result使用ActionMapperFactory提供的ActionMapper来重定位浏览器的URL来调用指定的action和(可选的)namespace.
        这个Result比ServletRedirectResult要好.因为你不需要把URL编码成xwork.xml中配置的ActionMapper提供的模式.
    这就是说你可以在任意点上改变URL模式而不会影响你的应用程序. 因此强烈推荐使用这个Result而不是标准的redirectresult来解决重定位到某个action的情况.
    ActionName (默认) - 重定位到的action名 
    namespace - action的名称空间. 如果为null,则为当前名称空间


    redirectResult:
    调用{@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>


    *********************************************************************************************************


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

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

    <action name="enterpreinfo"class="preinfoBusinessAction" method="enterPreinfoSub">
      <result name="success"type="redirectAction">
        showpreinfo?preinfo.order_number=${preinfo.order_number}&amp;preinfo.company_name=${preinfo.company_name}
     </result>
     <result name="error"type="redirect">
     <paramname="location">/error.jsp</param>
     </result>
    </action>
    因为使用了redirectAction,所以要注意不能将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.

    ?

    进行上面说明的替换后,就正常了。

    ********************************************************************************

    今天在用struts2在做项目时候,从一个action我想跳转到另一个action,并且呢得带上值。说说我的做法吧,首先你得在你的第一个action中这个id必须要有set、get方法。 
    跳转时你的struts.xml: 
    (方法一): 
    <result name="topic"type="redirect">/topicAction!findTopics.do?topicId=${topicId}</result> 
    (方法二): 
    <result name="topic"type="redirectAction"> 
      <paramname="actionName">findTopics</param> 
      <paramname="topicId">${topicId}</param> 
    </result>

    如果是多个参数的话,继续再加几个<param>就行了,对于(方法一)如果是多个参数的怎么办? 
    <result name="topic"type="redirect">/topicAction!findTopics.do?topicId=${topicId}&amp;elementId=${elementId}</result> 
    这不就行了。



     

    ************************************************************************************
    This is how I should do it

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


    *************************************************************************************
    http://corradignw.javaeye.com/blog/355717


    struts2.1.6无论是xml还是annotation配置redirectAction时,如果要传一些参数,
    可是这些参数在ServletActionRedirectResult并没有声明,这时ognl会抛异常出来。
    但实际上传值是成功的。详见struts2的jira: 
    例: 
    Java代码 
    @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) 
    Xml代码 :

    <resultname="success">/main.jsp</result> 
    <resultname="success">/main.jsp</result> 
    以上写法使用了两个默认,其完整的写法为: 
       <resultname="success"type="dispatcher"> 
        <paramname="location">/maini.jsp</param> 
    </result> 
    location只能是页面,不能是另一个action(可用type="chain"解决)。

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

    <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>

    redirectAction结果类型使用ActionMapperFactory提供的ActionMapper来重定向请求到另外一个action 
    Xml代码:

    <result name="err"type="redirecAction"> 
       <paramname="actionName">重定向的Action名</param> 
        <paramname="namespace">重定向Action所在的名字空间</param> 
    </result> 
    redirect和redirectAction两种结果类型在使用上其实并没有什么区别,只是写法不同而已。

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

    <action name="step1"class="test.Step1Action"> 
        <result name="success"type="chain">step2.action</result> 
    </action> 
    <action name="step2"class="test.Step2Action"> 
    <resultname="success">finish.jsp</result> 
    </action> 
    处于chain中的action属于同一个http请求,共享一个ActionContext 
      
    plaintext结果类型用于直接在页面上显示源代码

    Xml代码:

    <result name="err"type="plaintext"> 


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

  • 相关阅读:
    Hessian简要入门
    MapReduce启动的Map/Reduce子任务简要分析
    hive默认分隔符引起的日志分割问题
    Spring MVC中发布Restful Web服务
    JPA基本介绍以及使用
    hsqldb简单使用总结
    Vim编辑器基本操作学习(二)
    locale错误导致Java中文乱码错误的总结
    Vim编辑器基本操作学习(一)
    hadoop map任务Combiner被调用的源码逻辑简要分析
  • 原文地址:https://www.cnblogs.com/baobeiqi-e/p/9884807.html
Copyright © 2011-2022 走看看