【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
【struts2】名为redirect的ResultType的更多相关文章
- 【struts2】名为chain的ResultType
1)基本使用 名称为“chain”的ResultType,在struts-default.xml里的配置如下: <result-type name="chain" class ...
- 【struts2】名为dispatcher的ResultType
1)基本使用 名称为“dispatcher”的ResultType,在struts-default.xml里的配置如下: <result-type name="dispatcher&q ...
- nginx反向代理tomcat应用,struts2网站程序redirect时导致请求地址错误的解决方法
一个使用struts2的网站在登录页面需要进行redirect跳转,大致如下: <package name="admin" extends="httl-defaul ...
- Struts2中的redirect参数传递
在Action之间传递参数有如下方法: (方法一): Xml代码 1. <result name="topic" type="redirect">f ...
- 【struts2】Result和ResultType
简单的说,Result是Action执行完后返回的一个字符串,它指示了Action执行完成后,下一个页面在哪里.Result仅仅是个字符串,仅仅是用来指示下一个页面的,那么如何才能够到达下一个页面呢? ...
- Struts2 基本的ResultType 【学习笔记】
在struts2-core.jar/struts-default.xml中,我们可以找到关于result-type的一些配置信息,从中可以看出struts2组件默认为我们提供了这 些result-ty ...
- JavaWeb -- Struts2 ResultType细化, 国际化
1. ResultType细化 <result-types> <result-type name="chain" class="com.opensymp ...
- 【Struts2二】结果集(result-type)
在jsp/servlet中,结果集一般是指请求转发和重定向这两种. Struts2作为框架,提供了基于这两种的很多其它的结果集! 在struts-default.xml中定义了一些默认的结果集: ...
- struts2 CVE-2013-2251 S2-016 action、redirect code injection remote command execution
catalog . Description . Effected Scope . Exploit Analysis . Principle Of Vulnerability . Patch Fix 1 ...
随机推荐
- (转)Debug Assertion Failed! Expression: _pFirstBlock == pHead
最近在VS上开发C++程序时遇到了这个错误: Debug Assertion Failed! Expression:_pFirstBlock == pHead 如图: 点击Abort之后,查看调用 ...
- C#.NET常见问题(FAQ)-override覆盖和virtual虚类如何理解
父类使用virtual关键字,可以让子类的实例完全代替基类的类成员.(前面父类virtual后面子类override),比如下面我定义一个Employee的员工的基类,给这个基类定义了Start_Wo ...
- CAD2006您没有足够的权限来安装本产品
在Win10的环境下安装CAD2006,可能会报错"您没有足够的权限来安装本产品". 解决方法是,右键以"兼容性疑难解答"运行 在弹出的对话框中,点击 &quo ...
- Android中创建option menu
1.首先在res目录下新建一个menu文件夹,右击res目录->New->Directory,输入文件夹名menu,点击OK. 接着在这个文件夹下再新建一个名叫main的菜单文件,右击me ...
- SQL Server Window Function 窗体函数读书笔记一 - SQL Windowing
SQL Server 窗体函数主要用来处理由 OVER 子句定义的行集, 主要用来分析和处理 Running totals Moving averages Gaps and islands 先看一个简 ...
- 利用RTMFP开发P2P应用
利用RTMFP开发P2P应用 flash10使用RTMFP 开发点对点P2P应用 通过Stratus 服务器在Flash Player中使用RTMFP 开发 点对点应用 Adobe Flash Pla ...
- TxQueryRunner-JDBC小工具
1.TxQueryRunner的简介(需要相关jar包的请留言) TxQueryRunner类是common-dbutils下QueryRunner的子类,是用来简化JDBC操作的,所以要导入comm ...
- spring cloud 加入配置中心后的 部分 配置文件优先级
经过一个小时的实验,得出部分配置优先级如下: bootstrap.properties:位于jar包外的优先级最高 application.properties:配置中心的文件 > 命令行配置 ...
- Linux下的二进制兼容性的检测
都知道Linux的二进制兼容与windows相比简直是天差地别,windows的二进制兼容做得特别好,很老的游戏都能在windows 10上跑,写的好的程序,在XP上也不是不可以.但是Linux就不一 ...
- 使用CodePush实时更新 React Native 和 Cordova 应用
近期公司的React native App(云订货)用上CodePush实时更新App技术了.棒棒的 CodePush 是微软开发的.能够实时更新 React Native 和 Cordova 应用. ...