研磨Struts2 之 第六章 Result【私塾在线原创】

Result是Action执行完返回的一个字符串常量,它表示Action执行完成的状态,
比如:执行成功、执行失败等。在前面Action的介绍中,使用的都是默认的标准
Result,当然Result我们也可以自己定义,只要是一个字符串常量就可以了。
   Result的值在struts.xml配置文件里就是result标签里“name”的值。
 
标准的Result有:
SUCCESS:Action执行成功,显示result视图给用户
NONE:Action执行成功,不需要显示视图
ERROR: Action执行失败,显示错误页面给用户
INPUT:执行Action需要更多的输入信息
LOGIN:因用户没有登陆而没有正确执行,将返回该登陆视图
“type”就是我们的Result Type,Result Type是一个类,它在Action执行完成
并返回Result之后,决定采用哪一种视图技术,将执行结果展现给用户。我们输出
的类型是:type=“dispatcher”,它对应org.apache.struts2.dispatcher.ServletDispatcherResult这个类,他的配置
在struts-default.xml中,该文件在struts2-core-2.1.8.1.jar包的根目录下。他
将执行结果通过javax.servlet.RequestDispatcher的forward()或include()方法调
度到Jsp页面展现。
可以自己开发Result Type,实现我们需要的视图展现方式。在struts2中,它已
经为我们提供了很多Result Type,实现了视图部分对JSP, Velocity, FreeMarker,
JasperReports,XML等的支持。
每个result映射需要一个名字(name)、一个可选的类型(type)、和一个具体
的值(value);当result类型没有指定的时候,就会使用定义在package或者
superpackage的默认result类型,这种情况下就和struts-default.xml文件中的定
义一样,默认的result类型就是分发器(dispatcher)。
1:定义一个类,实现Result
2:实现public void execute(ActionInvocation invocation)方法。
3:可以添加从配置传入的参数,注意至少要提供set方法,可以没有get方法
4:在struts.xml配置里面要做两件事情:
(1)注册自己的result type,如:

java代码:
(2)在使用的时候直接使用上面注册的名字,要注意传参数:
5:在Action中返回Result的时候,就使用MyResultTest就可以了,这样运行的时候就根据这个Result的字符串,找到对应的result type,然后根据result type的注册,找到对应的Result的实现类,然后调用该类的execute方法,得到结果。
接下来看看通用的Result:
一:dispatcher result
1:定义在struts-default.xml中struts-default包中

java代码:
2:在struts.xml中使用如下:

java代码:
/t2.jsp
3:通过javax.servlet.RequestDispatcher的forward()或include()方法调度到页面展现,这样的页面一般是Jsp页面
 
二:redirect result
1:定义在struts-default.xml中struts-default包中
2:在struts.xml中使用如下:

java代码:
/t2.jsp
3:在程序里是通过调用HttpServletResponse.sendRedirect(String location)方法,将响应定向到参数location指定的、新的url中
4:与dispatch不同的是:redirect是将响应重定向到浏览器指定的位置,它将会导致Action执行完成的数据丢失或不再可用。
5:如果有参数传递的话,按照${变量}的格式写,比如:
/f2.jsp?pt=${id},参数值的来源是Action中能取到的值
 
 
 除了前面提到的这些result,Struts2还提供其他的result,比如用于同:Velocity 、FreeMarker 、JasperReports等的结合。这里简单的提一下:
1:Velocity类似Jsp的执行环境(使用JavaServlet容器),将Velocity模板转化成数据流的形式,直接通过JavaServlet输出
2:FreeMarker是一个纯Java模板引擎;一个普通的基于模板生成文本的工具,它只能应用在Web应用环境中。
3:JasperReports将Action执行的结果通过JasperReports报表形式输出,可以指定JasperReports支持的输出格式(PDF、HTML、XLS、CSV、XML等),默认是通过PDF格式输出。
4:XML/XSL:将结果转换为xml输出
运用全局Result映射减少重复配置
     在Struts2中可以把一些通用的result的定义集中起来,而不需要在每一个action映射中逐一重复定义这些result,如:

java代码:
/WEB-INF/pages/home.jsp
提示:
     局部映射比全局映射有更高的优先级,因此出现同名的情况下,局部映射会覆盖同名的全局映射。
1:定义一个类,实现Result
2:实现public void execute(ActionInvocation invocation)方法。
3:可以添加从配置传入的参数,注意至少要提供set方法,可以没有get方法
4:在struts.xml配置里面要做两件事情:
(1)注册自己的result type,如:

java代码:
(2)在使用的时候直接使用上面注册的名字,要注意传参数:
5:在Action中返回Result的时候,就使用MyResultTest就可以了,这样运行的时候就根据这个Result的字符串,找到对应的result type,然后根据result type的注册,找到对应的Result的实现类,然后调用该类的execute方法,得到结果。

java代码:
MyResult类:
package cn.javass.s2;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.Result;
public class MyResult implements Result{
@Override
public void execute(ActionInvocation invocation) throws Exception {
System.out.println("This is my result.");
}
}
Struts.xml中的配置:
/t1.jsp
在元素中设置元素,可以用来指定在execute方法抛出指定错误的时候,跳转到哪个指定的。
/error.jsp/s2impl/welcome.jsp
就像全局结果一样,异常映射也可以设置全局异常映射,可以被这个包和所有子包内的action共用。
exception="java.lang.ArithmeticException"/>
        exception="java.lang.Exception"/>
在开发当中,常常需要在action执行完毕,而result还没有开始执行的时候,做一些处
理,比如异常处理。当作一个基本的事件来处理,也就是在事件源的地方注册监听器,监听到
事件后,转发到相应的执行方法上,当然还是要实现相应的监听器的,示例如下:
 
注册部分的代码:
PreResultListener pr = new  MyBeforeResult  ();
ActionContext.  getContext ().getActionInvocation().addPreResultListener(pr);
上面的代码写在自定义interceptor的执行方法中的,放到actionInvocation.invoke()之前。
 
监听器和方法实现的代码:

java代码:
class MyBeforeResult implements PreResultListener{
public void beforeResult(ActionInvocation invocation, String resultCode) {
System.out.println("beforeResult------------&gt");
OgnlValueStack s = invocation.getInvocationContext().getValueStack();
os.setValue("id","哈哈,被修改了");
         invocation.getInvocationContext().setValueStack(os);
}
}
 
视频配套PPT,视频地址【  研磨Struts2视频课程

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26662749/viewspace-717565/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26662749/viewspace-717565/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值