• 【struts2】名为redirect的ResultType


      1)基本使用

      名称为“redirect”的ResultType,在struts-default.xml里的配置如下:

    <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>

      通过配置可以看出,它对应的实现类是ServletRedirectResult。

      这种Result同常也使用JSP作为视图技术。它包装的是javax.servlet.http.HttpServletResponse类的sendRedirect方法,这个ResultType也是用来实现跳转到下一个页面的。但是它的功能与上面的dispatcher不同,“redirect”的特点是全新的请求,这就意味着,本次请求和跳转到下一个页面的请求是不同的对象,因此它们的值是不一样的。

      2)特殊用法

      对比着dispatcher的ResultType,我们看看它的特点。同样在<result>元素的定义中可以使用Action的execute方法运行之后的数据。同样在Action中定义一个folder字符串,并在execute或者validate方法中对它赋值。那么,在<result>的定义中就可以引用folder这个变量,示例如下:

    <result name="toWelcome" type="redirect">/${folder}/welcome.jsp</result>  

      由于redirect采取重定向的方式,下一个页面会取不到上一个请求对象里面的值,如果要传值的话,可以采用get的方式传参。示例如下:

    <result name="toWelcome" type="redirect">/${folder}/welcome.jsp?account=${account}</result>  

      上面这个配置,会向新请求里面传入account的参数,这样在欢迎页面就可以获取到account的值了。但是,前面写的欢迎页面是取不到这个account的值的,为什么呢?先来看看前面写的欢迎页面取值的那句话,如下:

    欢迎账号为<s:property value="account"/>的朋友来访  

      以前的欢迎页面,是通过使用Struts2的标签来获取的account的值,Struts2的标签会到Struts2的值栈里面去取值,而这里是执行Result的时候,才再请求上添加了account这么一个参数,然后就直接回到页面了,根本不会再走一次Struts2的运行过程,也就是说,这里传递的这个参数,根本不会进入到这个请求对应的值栈,因此这里这个写法是取不到值的。

      那么该怎么写才能获取到这个account参数的值呢?有两个简单的方法,一个是直接使用Servlet的HttpServletRequest对象的方法来获取参数,另外一个方法是直接使用EL表达式,示例如下:

    欢迎账号为${param.account}的朋友来访  
    <br/>
    欢迎账号为<%=request.getParameter("account") %>的朋友来访  

      3)更完整的配置方式

       与“dispatcher”一样,“redirect”也可以配置<param>,同样可以配置location和parse,如下:

    <result name="toWelcome" type="redirect">  
        <param name="location">/s2impl/welcome.jsp</param>  
        <param name="parse">true</param>  
    </result>

      参考资料:http://www.iteye.com/topic/1124526

  • 相关阅读:
    JS数据类型、JS数据类型转换、JS运算
    JS 变量
    js初识 何为JavaScript
    ES6 字符串的用法
    ES6 初识 let、const、ES6兼容、解构赋值
    Bootstrap 小结
    列一下我所认为的,你面试微软前必须要读的十本书[转]
    MFC中换行实现
    MFC中输入框的文本转换为char[]字符数组类型
    MFC下OpenGL入门(可以用)
  • 原文地址:https://www.cnblogs.com/ningvsban/p/3735041.html
Copyright © 2020-2023  润新知