【struts2】名为dispatcher的ResultType
1)基本使用
名称为“dispatcher”的ResultType,在struts-default.xml里的配置如下:
- <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
通过配置可以看出,它对应的实现类是ServletDispatcherResult。
如果采用JSP作为视图的实现技术,那么这个ResultType是最常用的。在这个ResultType的实现中,调用了javax.servlet.RequestDispatcher类的forward方法,也就是说它相当于是对RequestDispatcher的一个再包装。
既然是这样,那么在Servlet中使用RequestDispatcher来进行页面跳转的特性,也就自然被“dispatcher”这个ResultType继承下来了。那么Servlet中的RequestDispatcher,到底有什么特性呢?那就是是通过RequestDispatcher来进行页面跳转,将会保持是同一个请求对象。这有什么好处呢?由于是同一个对象,那就意味着有同样的数据,而请求对象里面数据众多,在Servlet的request对象里面,典型有如下数据:
- 参数区(parameter),就是用户在页面上填写并提交的数据
- Head区,由浏览器在发出请求的时候,自动加入到请求包的数据
- 属性区(Attribute),由开发人员存储在属性区的值,通常是通过request.setAttribute方法、request.getAttribute方法来进行访问
- cookie区,由浏览器在发出请求的时候,自动把相关的Cookie数据通过request传递到服务端
好处是不是很大?因此这也是使用Struts2来进行web开发中最常使用的ResultType。
2)特殊用法
在<result>元素的定义中可以使用Action的execute方法运行之后的数据。怎么做呢?一起来看看示例。或许我们都已经习惯于以下这种简单的<result>配置:
- <result name="toWelcome">/s2impl/welcome.jsp</result>
里面用于指定jsp位置的字符串都是固定的。如果我们希望这个字符串是活动的,可以根据某些参数值来变化,该怎么做到呢?如果我们在Action中定义一个folder字符串,并在execute中或validate中对它进行赋值,这里我们放到validate中,代码如下:
- package cn.javass.hello.struts2impl.action;
- import com.opensymphony.xwork2.ActionSupport;
- public class HelloWorldAction extends ActionSupport {
- private String account;
- private String password;
- private String submitFlag;
- private String folder;
- public String execute() throws Exception {
- this.businessExecute();
- return "toWelcome";
- }
- public void validate(){
- this.folder = "s2impl"; //放在这里的原因是:validate先与execute执行,如果fieldError里面有值,execute就不执行了
- if(account==null || account.trim().length()==0){
- this.addFieldError("account", this.getText("k1"));
- }
- if(password==null || password.trim().length()==0){
- this.addFieldError("password", this.getText("k2"));
- }
- if(password!=null && !"".equals(password.trim()) && password.trim().length()<6){
- this.addFieldError("password", this.getText("k3"));
- }
- }
- /**
- * 示例方法,表示可以执行业务逻辑处理的方法,
- */
- public void businessExecute(){
- System.out.println("用户输入的参数为==="+"account="+account+",password="+password+",submitFlag="+submitFlag);
- }
- public String getAccount() {
- return account;
- }
- public void setAccount(String account) {
- this.account = account;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getSubmitFlag() {
- return submitFlag;
- }
- public void setSubmitFlag(String submitFlag) {
- this.submitFlag = submitFlag;
- }
- public String getFolder() {
- return folder;
- }
- public void setFolder(String folder) {
- this.folder = folder;
- }
- }
那么,在<result>的定义中就可以引用folder这个变量,示例如下:
- <package name="helloworld" extends="struts-default">
- <action name="helloworldAction" class="cn.javass.hello.struts2impl.action.HelloWorldAction">
- <result name="toWelcome" type="dispatcher">/${folder}/welcome.jsp</result>
- <result name="input">/${folder}/login.jsp</result>
- </action>
- </package>
这样配置的结果和前面写死的路径效果时完全一样的。仔细观察一下你会发现,“${folder}”的写法跟以前在jsp上写的el表达式类似,而里面的“folder”是跟Action的属性相对应的。
3)更完整的配置方式
平时我们把result对应的jsp的路径,直接作为<result>元素中的文本来配置,这是简化的写法,实际上对于dispatcher还有两个参数可以配置,示例如下:
- <result name="toWelcome" type="dispatcher">
- <param name="location">/s2impl/welcome.jsp</param>
- <param name="parse">true</param>
- </result>
location参数就是咱们平时写的下一个jsp的位置,而parse参数决定了location是否可以通过使用OGNL来引用参数,默认为true。其实,前面使用${folder}来引用Action的folder属性的值的例子,就是使用的OGNL来引用参数。
参考资料:http://www.iteye.com/topic/1124526
【struts2】名为dispatcher的ResultType的更多相关文章
- 【struts2】名为redirect的ResultType
1)基本使用 名称为“redirect”的ResultType,在struts-default.xml里的配置如下: <result-type name="redirect" ...
- 【struts2】名为chain的ResultType
1)基本使用 名称为“chain”的ResultType,在struts-default.xml里的配置如下: <result-type name="chain" class ...
- struts2 错误:Dispatcher initialization failed java.lang.RuntimeException
严重: Dispatcher initialization failed java.lang.RuntimeException: java.lang.reflect.InvocationTargetE ...
- 深入struts2.0(五)--Dispatcher类
1.1.1 serviceAction方法 在上个Filter方法中我们会看到例如以下代码: this.execute.executeAction(request, response, m ...
- 【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框架基础
Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ...
随机推荐
- WIN10系统 如何自动调整系统时间
在底部搜索框中输入设置 先关闭再打开自动设置时间的选项即可重新获取系统时间,前提要联网状态
- Objective-C编程 - 关于Block的要点
1. 首先,我们快速过一下,什么是Block? Block是一段代码,它在OC中以^开头,可以有返回值,和参数列表,但就是没有名字. 所以,你可以把它认为是匿名函数. 事实上,它和Swift中的闭包( ...
- JS判断页面加载完毕
//JS判断页面加载完毕,再隐藏加载效果层,一个简单的JS加载效果. document.onreadystatechange = function () { if (document.readySta ...
- PHP 字符串编码的转换
原文链接:http://mangguo.org/php-string-encoding-convert-and-detect/ GBK 和 UTF-8 编码的转换是一个非常恶心的事情,比如像 PHP ...
- 持续集成篇_08_Hudson持续集成服务器的使用(自动化编译、分析、打包、部署)
持续集成篇_08_Hudson持续集成服务器的使用(自动化编译.分析.打包.部署) 1.创建任务 svn用户验证 验证通过 *****五颗*表示每分钟检查svn路径是否有变更,有变更就会重新构建,相当 ...
- bat脚本禁用和开启本地连接
netsh interface set interface name="本地连接" admin=disabled //禁用本地连接 netsh interface set inte ...
- Python实现微信刷卡支付(条码支付)MicroPay
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7686765.html 一:资料阅读 场景介绍:https://pay.weixin.qq.com/wiki/d ...
- android JNI调用(Android Studio 3.0.1)(转)
最近回头复习了一下android 的jni调用,却发现按以前的方法调用失败,一怒之下就重新摸索,碰了几次壁,发现网上好多教程都不能成功调用,于是记录一下现在AS版本成功好用的调用方法. 这里设定你的n ...
- 10、java5线程池之返回结果的任务之Callable与Future
JDK文档描述Callable: public interface Callable<V>返回结果并且可能抛出异常的任务.实现者定义了一个不带任何参数的叫做 call 的方法. Calla ...
- Spring Boot 使用Jar打包发布, 并使用 Embedded Jetty/Tomcat 容器
Jar包发布 在项目pom.xml中, 如果继承了Spring Boot的starter parent, 那么默认已经包含打包需要的plugins了, 设置为jar就能直接打包成包含依赖的可执行的ja ...