【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

时间: 2024-10-26 22:03:48

【struts2】名为redirect的ResultType的相关文章

【struts2】名为chain的ResultType

1)基本使用 名称为"chain"的ResultType,在struts-default.xml里的配置如下: <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/> chain是一种特殊的视图结果,用来将Action执行完之后链接到另一个Action中继续执行,新的Action使用上一个Action的上下文(ActionContext

【struts2】名为dispatcher的ResultType

1)基本使用 名称为"dispatcher"的ResultType,在struts-default.xml里的配置如下: <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/> 通过配置可以看出,它对应的实现类是ServletDispatcherResu

struts2中注解redirect时传递参数中文乱码问题解决方法

试过了很多方法  tomcat 编码  .字符串转换编码 .URLEncoder  .. 但是都没解决,后来仔细看了   struts2 的redirect ,redirectAction , 加上 params={"encode","true"} 就不会有乱码了 @Action(value = "/backend/deleteApplyInfoOfAuditById", results = { @Result(name = "succ

Struts2系列:(6)result-type和全局result

在(2)中到struts.xml中的package.action和result进行了简单介绍. 在(3)中到action进行了一些详细介绍. 在本节中,将对result进行一些详细介绍,主要包括两部分:result-type和全局的result. 1.result-type #代码角度#在Action类中,每个 action 方法均返回一个 String 类型的值, Struts 将根据这个值来决定响应什么结果. #配置角度#在struts.xml配置文件中,每个 Action 标签可包含多个

【struts2】Result和ResultType

简单的说,Result是Action执行完后返回的一个字符串,它指示了Action执行完成后,下一个页面在哪里.Result仅仅是个字符串,仅仅是用来指示下一个页面的,那么如何才能够到达下一个页面呢?下一个页面如何能正确地展示结果呢?这就该引出一个新概念--ResultType,所谓ResultType,指的是具体执行Result的类,由它来决定采用哪一种视图技术,将执行结果展现给用户. 很多时候,我们并不去区分Result和ResultType,而是笼统的称为Result.因此,Result除

【Struts2二】结果集(result-type)

在jsp/servlet中,结果集通常是指请求转发和重定向这两种! Struts2作为框架,提供了基于这两种的更多的结果集! 在struts-default.xml中定义了一些默认的结果集:          <result-types> <result-type name= "chain" class="com.opensymphony.xwork2.ActionChainResult" /> <result-type name= &

struts2 CVE-2013-2251 S2-016 action、redirect code injection remote command execution

catalog 1. Description 2. Effected Scope 3. Exploit Analysis 4. Principle Of Vulnerability 5. Patch Fix 1. Description struts2中有2个导航标签(action.redirect),后面可以直接跟ongl表达式,比如 1. test.action?action:${exp} 2. test.action?redirect:${exp} Struts2的DefaultActio

struts2的结果类型

1.从struts-default.xml入手,得到结果类型列表以及对应的处理类: <result-types> <!-- 转发到action --> <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/> <!-- 转发到jsp --> <result-type name="dispatcher&quo

Struts2系列:(12)拦截器

学习拦截器 1.拦截器能够做什么?(Why 和 What) 2.如何定义拦截器?(How to use) 3.如何注册拦截器?(How to use) 4.如何使用拦截器?(How to use) 1.拦截器能够做什么? Struts2 拦截器在访问某个 Action 方法之前或之后实时拦截的可插拔的组件. 拦截器栈(Interceptor Stack): 将拦截器按一定的顺序联结成一条链. 实现原理:当请求action时,Struts 查找配置文件,根据其配置实例化拦截器对象,并形成一个列表,