Struts2中 Result类型配置详解
来源:互联网 发布:华山派 知乎 编辑:程序博客网 时间:2024/06/06 03:46
在com.opensymphony.xwork2.Action接口中定义了一组标准的结果代码,可供开发人员使用,当然了只有我们的action继承ActionSupport这个类才可以使用下面的结果代码,如下所示:
public interface Action
{
}
那么它会自动跳转到name为input的<result/>,然后转到INPUT所对应的页面
若JSP页面中表单是用普通<form>编写的,发生错误而返回该页面时,则原数据将消失
若JSP页面中表单是用<s:form/>编写的,发生错误而返回该页面时,则原数据仍存在
若没有提供name值为input的<result/>,那么发生错误时,将直接在浏览器中提示404错误
要。
这两部分进行介绍。
一、配置 result映射
绝对路径以斜杠(/)开头,相对于当前的Web应用程序的上下文路径;
相对路径不以斜杠(/)开头,相对于当前执行的action的路径,也就是namespace指定的路径。
例如:
二、result结果类型详解
type 所有类型:(在struts2-core.jar/struts-default.xml中可以找到)
Type类型值
作用说明
对应类
chain
用来处理Action 链
com.opensymphony.xwork2.ActionChainResult
dispatcher(默认值)
用来转向页面,通常处理JSP
org.apache.struts2.dispatcher.ServletDispatcherResult
redirect
重定向到一个URL
org.apache.struts2.dispatcher.ServletRedirectResult
redirectAction
重定向到一个Action
org.apache.struts2.dispatcher.ServletActionRedirectRes
plainText
显示源文件内容,如文件源码
org.apache.struts2.dispatcher.PlainTextResult
freemarker
处理FreeMarker模板
org.apache.struts2.views.freemarker.FreemarkerResult
httpheader
控制特殊http行为的结果类型
org.apache.struts2.dispatcher.HttpHeaderResult
stream
向浏览器发送InputSream对象,通常用来处理文件下载,还可用于返回AJAX数据。
org.apache.struts2.dispatcher.StreamResult
velocity
处理Velocity模板
org.apache.struts2.dispatcher.VelocityResult
xslt
</result>
location参数是默认的参数,在所有的Result实现类中,都定义了一个字符串类型的DEFAULT_PARAM静态常量,专门用于指定默认的参数名。DEFAULT_PARAM常量的定义:public static final StringDEFAULT_PARAM=“location”;
<action name=“viewNews”class=“com.ibm.ViewNewsAction”
<result name=“success”
</result>
</action>
考虑到默认值的使用(dispatcher和location都是默认值),上述可以简化为:
<action name=“viewNews”class=“com.ibm.ViewNewsAction”>
<result name=“success”>viewNews.jsp?id=${id}</result>
</action>
如果有某些数据需要在目标资源中访问,
示例(1)、<result name="success" type="redirect">
示例(2)、
/genReport/generateReport.jsp?reportType=pie&width=100&height=100
</package>
3、redirectAction结果类型(重定向到一个Action)
示例、
</package>
<package name="secure"extends="struts-default"namespace="/secure">
</package>
<packagename="passingRequestParameters
/genReport/generateReport.action?reportType=pie&width=100&height=100
</package>
4、链接类型
示例、
</package>
<package name="secure"extends="struts-default"namespace="/secure">
</package>
5、HttpHeaderResult:
<resultname="proxyRequired"type="httpheader">
</result>
6、StreamResult(向浏览器发送InputSream对象,通常用来处理文件下载)
</result>
7、PlainTextResult(
<actionname="displayJspRawContent">
</action>
设置charSet属性的目的就是让JSP页面的编码与明文显示时的编码一致
8、VelocityResult(处理Velocity模板)
9、XLSResult(处理XML/XLST模板)
</result>
10、FreeMarkerResult
附、另外第三方的Result类型还包括JasperReportsPlugin,专门用来处理JasperReport类型的报表输出。
<%@ tagliburi="http://tiles.apache.org/tags-tiles"prefix="tiles"%>
<%@ taglib prefix="s"uri="/struts-tags"%>
<tiles:importAttributename="title"scope="request"/>
<html>
<body>
</body>
</html>
注意!!!!.传递中文
记住永远不要在浏览器的地址栏中传递中文。在传递中文前先进行编码
A.action中
public class User extendsActionSupport{
}
B.struts.xml中
在这里使用了类似于el表达式的方式传值,${username}其中username为action中定义的
C.redirect.jsp中
重定向中传递中文先进行编码,在jsp页面中先接受参数,然后对其进行字节分解,然后进行解码。
使用Struts2对JSON的扩展
要使用这个扩展功能肯定需要添加支持包。经过本人的调试,这里有两种选择:
1. xwork-core-2.1.6.jar和struts2-json-plugin-2.1.8.jar。如果你想使用struts2-json-plugin-2.1.8.jar这种支持方式,你的xwork-core-*.jar不能选择2.2.1及以上版本,因为xwork-core-*.jar的2.2.1及以上版本中没有了org.apache.commons.lang等包。启动tomcat的时候会出现:java.lang.NoClassDefFoundError: org.apache.commons.lang.xwork.StringUtils。
2. xwork-2.1.2.jar和jsonplugin-0.34.jar。如果想用jsonplugin-0.34.jar这种支持方式,那需要切换你的xwork-core-*.jar为xwork-2.1.2.jar。因为jsonplugin-0.34.jar需要com.opensymphony.xwork2.util.TextUtils
这个类的支持。而xwork-core-*.jar的2.2.1以上版本均为找到该类,且在xwork-core-2.1.6.jar中也没有该类。
最后说一句,还因为用原始构建方式而不停蹚雷,确实不值得,真心累。使用Maven等自动化构件方式,会在很大程度上避免依赖包间的版本差异的bug。第三节的“struts2零配置”中会使用maven的构件方式。
编写接口代码
该类中json()方法就是普通Struts2的方法。在这里没有看到任何JSON格式的字符串,因为我们将要把这项工作交给扩展去完成。在没有任何设定的情况下,改类下的所有getter方法的返回值将被包含在返回给客户端的JSON字符串中。要剔除不需要包含的属性,在类结构结构中需要在getter方法上使用@JSON(serialize=false)进行注解,当然在不影响其他业务的时候也可以直接去掉这个getter方法。所以本例中的返回结果是将dataMap对象转换成的JSON格式的字符串。
- package json;
- import java.util.HashMap;
- import java.util.Map;
- import org.apache.struts2.json.annotations.JSON;
- import com.opensymphony.xwork2.ActionSupport;
- /**
- * JSON测试
- *
- * @author Watson Xu
- * @date 2012-8-4 下午06:21:01
- */
- public class JsonAction extends ActionSupport{
- private static final long serialVersionUID = 1L;
- private Map<String,Object> dataMap;
- private String key = "Just see see";
- public String json() {
- // dataMap中的数据将会被Struts2转换成JSON字符串,所以这里要先清空其中的数据
- dataMap = new HashMap<String, Object>();
- User user = new User();
- user.setName("张三");
- user.setPassword("123");
- dataMap.put("user", user);
- // 放入一个是否操作成功的标识
- dataMap.put("success", true);
- // 返回结果
- return SUCCESS;
- }
- public Map<String, Object> getDataMap() {
- return dataMap;
- }
- //设置key属性不作为json的内容返回
- @JSON(serialize=false)
- public String getKey() {
- return key;
- }
- }
配置aciton
在配置中,首先需要action所在的package继承了json-default,或者继承的父包继承了json-default。这配置action的返回类型的type为json,并且可以配置其序列化的属性等一些类参数
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <package name="json" extends="struts-default,json-default" >
- <action name="json" class="json.JsonAction" method="json">
- <result type="json">
- <!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 -->
- <param name="root">dataMap</param>
- </result>
- </action>
- </package>
- </struts>
- Struts2中 Result类型配置详解
- Struts2中 Result类型配置详解
- Struts2中 Result类型配置详解
- Struts2中Result类型配置详解
- Struts2中 Result类型配置详解
- Struts2中 Result类型配置详解
- Struts2中 Result类型配置详解
- Struts2中 Result类型配置详解
- Struts2中 Result类型配置详解
- Struts2中 Result类型配置详解一+++++struts.xml配置详解二
- Struts2 Result配置详解
- Struts2 Result配置详解
- struts2 result配置详解
- Struts2 Result 配置详解
- struts2中result详解
- struts2常用result类型详解
- struts2 action 中配置result 的结果类型
- Struts2中result配置的各路视图转发类型
- 剑指offer系列之四十六:求1到n的和
- 关于button按钮响应的三种写法和ImageButton判断状态
- Android中的JSON详细总结
- Day3之java语言概述
- 大话操作系统(2)内存管理
- Struts2中 Result类型配置详解
- 安卓学习之路6之插件AutoCompleteTextView和MultiAutoConpleteTextView
- ostringstream的用法(转载)
- onNewIntent的调用机制
- 杭电acm1039
- IOS 启动动画和适配
- Day4之FuctionOverload
- php => php经典编程265例目录
- 【剑指offer】二叉树的镜像