Struts2中 Result类型配置详解一
(2012-12-01 20:34:33) 标签: result类型struts2配置各种结果redirect | 分类: Struts2 |
在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 String DEFAULT_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>
<package name="passingRequestParameters
/genReport/generateReport.action?reportType=pie&width=100&height=100
</package>
4、链接类型
示例、
</package>
<package name="secure" extends="struts-default"namespace="/secure">
</package>
5、HttpHeader Result: HttpHeader(用来控制特殊的Http行为)
<result name="proxyRequired"type="httpheader">
</result>
6、Stream Result(向浏览器发送InputSream对象,通常用来处理文件下载)
</result>
7、PlainText Result( 显示原始文件内容,例如文件源代码)
<action name="displayJspRawContent">
</action>
设置charSet属性的目的就是让JSP页面的编码与明文显示时的编码一致
8、Velocity Result(处理Velocity模板)
9、XLS Result(处理XML/XLST模板)
</result>
10、 FreeMarkerResult
附、另外第三方的Result类型还包括JasperReportsPlugin,专门用来处理JasperReport类型的报表输出。
<%@ tagliburi="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@ taglib prefix="s"uri="/struts-tags" %>
<tiles:importAttribute name="title"scope="request"/>
<html>
<body>
</body>
</html>
注意!!!!.传递中文
记住永远不要在浏览器的地址栏中传递中文。在传递中文前先进行编码
A.action中
public class User extends ActionSupport{
}
B.struts.xml中
在这里使用了类似于el表达式的方式传值,${username}其中username为action中定义的
C.redirect.jsp中
重定向中传递中文先进行编码,在jsp页面中先接受参数,然后对其进行字节分解,然后进行解码。
参考博文连接:
http://struts2.group.iteye.com/group/wiki/1462-result-in-struts2 http://hi.baidu.com/langmanyuai/item/228e047ad6dc753d714423b0
- <?xml version="1.0" encoding="GBK"?>
- <!-- 下面指定Struts 2配置文件的DTD信息 -->
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <!-- struts是Struts 2配置文件的根元素 -->
- <struts>
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <constant name="" value="" />
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <bean type="" name="" class="" scope="" static="" optional="" />
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <include file="" />
- <!-- package元素是Struts配置文件的核心,该元素可以出现0次,或者无限多次 -->
- <package name="必填的包名" extends="" namespace="" abstract=""
- externalReferenceResolver>
- <!-- 该元素可以出现,也可以不出现,最多出现一次 -->
- <result-types>
- <!-- 该元素必须出现,可以出现无限多次-->
- <result-type name="" class="" default="true|false">
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <param name="参数名">参数值</param>*
- </result-type>
- </result-types>
- <!-- 该元素可以出现,也可以不出现,最多出现一次 -->
- <interceptors>
- <!-- 该元素的interceptor元素和interceptor-stack至少出现其中之一,也可以二者都出现 -->
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <interceptor name="" class="">
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <param name="参数名">参数值</param>*
- </interceptor>
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <interceptor-stack name="">
- <!-- 该元素必须出现,可以出现无限多次-->
- <interceptor-ref name="">
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <param name="参数名">参数值</param>*
- </interceptor-ref>
- </interceptor-stack>
- </interceptors>
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <default-interceptor-ref name="">
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <param name="参数名">参数值</param>
- </default-interceptor-ref>
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <default-action-ref name="">
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <param name="参数名">参数值</param>*
- </default-action-ref>?
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <global-results>
- <!-- 该元素必须出现,可以出现无限多次-->
- <result name="" type="">
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <param name="参数名">参数值</param>*
- </result>
- </global-results>
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <global-exception-mappings>
- <!-- 该元素必须出现,可以出现无限多次,异常处理资源-->
- exception-mapping name="" exception="" result="">
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <param name="参数名">参数值</param>*
- </exception-mapping>
- </global-exception-mappings>
- <action name="" class="" method="" converter="">
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <param name="参数名">参数值</param>*
- <!-- 下面元素可以出现0次,也可以无限多次 ,映射资源-->
- <result name="" type="">
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <param name="参数名">参数值</param>*
- </result>
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <interceptor-ref name="">
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <param name="参数名">参数值</param>*
- </interceptor-ref>
- <!-- 下面元素可以出现0次,也可以无限多次,异常处理资源 -->
- <exception-mapping name="" exception="" result="">
- <!-- 下面元素可以出现0次,也可以无限多次 -->
- <param name="参数名">参数值</param>*
- </exception-mapping>
- </action>
- </package>*
- <struts>
上面的struts.xml配置文件是一个非常全面的配置文件,包含了Struts 2的全部配置元素。
另外注意一下package标签
<package … />标签是用来把那些需要共享的通用信息——例如拦截器堆栈或URL命名空间——的配置组织在一起的。它通常由Action的配置组成,但也可以包括任何类型的配置信息。它还可以用来组织管理各自独立的功能——它们也可以被进一步拆分到不同的配置文件中。
这个标签的属性包括有:
—name ——开发人员为这个Package指定的唯一的名字。
—extends —— 当前这个Package所继承的Package的名字,被继承的Package中所有的配置信息(包括Action的配置)都可以在新的命名空间下,新的Package里面被使用。
—namespace ——命名空间提供了从URL到Package的映射。也就是说,如果两个不同的Package,其命名空间分别为“package1”和“package2”,那么URL差不多就是
“/myWebApp/package1/my.action” 和“/myWebApp/package2/my.action”这样的形式
—abstract ——如果这个属性的值为“true”,那么这个Package就只是一个配置信息的组合,也就无法通过Package的名字来访问其中配置的Action。