struts2 配置 Action(二)

 

一。Action 配置结果

 

 

<action name="Login" class="lee.LoginAction">
   <!-- 为success 的逻辑视图配置 Result ,type 属性指定结果类型 -->
   <result name="success" type="dispatcher">
   		<!-- 指定该逻辑视图对应的实际视图资源 -->
   		<param name="location">/a.jsp</param>
   </result>
</action>

<param name...>的name属性有如下2个值:

》 location:参数指定了逻辑视图对应的实际视图资源

》 parse:指定是否允许在实际视图名中使用 OGNL 表达式,默认 true。

 

以上可以简写为:

<action name="Login" class="lee.LoginAction">
   <!-- 为success 的逻辑视图配置 Result ,type 属性指定结果类型 -->
   <result name="success">/a.jsp </result>
</action>
 

 之所以能简写,是因为:

  如果 <result> 没有指定 location 参数 ,系统将<result > /a.jsp </result>中间的字符串当成实际视图;如果没有指定name属性,则 name 属性采用默认值: success ;如果没有指定 type 属性,则采用默认结果 dispatcher 类型。

 

 

struts 支持的处理结果类型

struts-default.xml 文件中

<result-types>
	<!-- Action 链式处理的结果类型 -->
	<result-type name="chain"
		class="com.opensymphony.xwork2.ActionChainResult" />
	<!-- 用于与 JSP 整合的结果类型 -->
	<result-type name="dispatcher"
		class="org.apache.struts2.dispatcher.ServletDispatcherResult"
		default="true" />
	<!-- 用于与freeMarker 整合的结果类型 -->
	<result-type name="freemarker"
		class="org.apache.struts2.views.freemarker.FreemarkerResult" />
	<!-- 用于控制特殊的 HTTP 行为的结果类型 -->
	<result-type name="httpheader"
		class="org.apache.struts2.dispatcher.HttpHeaderResult" />
	<!-- 用于直接跳转到其他 URL 的结果类型 -->
	<result-type name="redirect"
		class="org.apache.struts2.dispatcher.ServletRedirectResult" />
	<!-- 用于直接跳转到其他 Action 的结果类型  -->
	<result-type name="redirectAction"
		class="org.apache.struts2.dispatcher.ServletActionRedirectResult" />
	<!-- 用于向浏览器返回一个 InputStream 的结果类型  -->
	<result-type name="stream"
		class="org.apache.struts2.dispatcher.StreamResult" />
	<!-- 用于整合 Velocity  的结果类型  -->
	<result-type name="velocity"
		class="org.apache.struts2.dispatcher.VelocityResult" />
	<!-- 用于整合 XML/XSLT  的结果类型  -->
	<result-type name="xslt"
		class="org.apache.struts2.views.xslt.XSLTResult" />
	<!-- 用于显示某个页面原始代码的结果类型  -->
	<result-type name="plainText"
		class="org.apache.struts2.dispatcher.PlainTextResult" />
</result-types>
 

除了以上内容,在 struts2-jasperreports-plugin.jar 的 struts-plugin.xml 还定义了别的 如 JSF之类的结果类型

 

二。plainText 结果类型

  plainText 是把该页面的 HTML代码显示在浏览器中

<action name="Login" class="lee.LoginAction">
   <!-- 为success 的逻辑视图配置 Result ,type 属性指定结果类型 -->
   <result name="success" type="plainText">/a.jsp</result>
</action>

 上面的代码,在页面中会出现 中文乱码问题, 解决办法如下:

<action name="Login" class="lee.LoginAction">
   <!-- 为success 的逻辑视图配置 Result ,type 属性指定结果类型 -->
   <result name="success" type="plainText">
   		<!-- 指定该逻辑视图对应的实际视图资源 -->
   		<param name="location">/a.jsp</param>
   		<!-- 指定使用特定的编码集来处理页面代码 -->
   		<param name="charSet">GBK</param>
   </result>
</action>
 

三。redirect 结果类型

    这个类型与 dispatcher 相对, dispatcher 是将请求转发 “Forward” 到指定的 JSP而 redirect 是将请求重定向 “Redirect” 到指定的视图资源。

 

    redirect 是 HttpServletResponse 的 sendRedirect(String),重定向就是重新产生一个请求,因此此前的所有请求参数,请求属性, Action 实例 和 Action 中封装的属性全部丢失。重定向以后地址栏显示新的地址。

<action name="Login" class="lee.LoginAction">
   <!-- 为success 的逻辑视图配置 Result ,type 属性指定结果类型 -->
   <result name="success" type="redirect">/a.jsp</result>
</action>

 

四。redirectAction 结果类型

 

    redirectAction 与 redirect相似,区别是 redirectAction 使用 ActionMapperFactory 提供的 ActionMapper 来重定向请求。

     当需要让一个 Action 处理结束后,直接重定向到另一个 Action 时,使用。

 

redirectAction有 2 个 参数

     1. actionName : 该参数指定重定向的 Action 名

    2. namespace : 该参数指定需要重定向的 Action 所在的命名空间

<package name="public" extends="struts-default">
	<action name="Login" class="lee.LoginAction">   
	   <result name="success" type="redirectAction">   
	   		<!-- 指定重定向的 actionName -->
	   		<param name="actionName">dashboard</param>   		
	   		<!-- 指定重定向的 actionName 的命名空间 -->
	   		<param name="namespace">/secure</param>
	   </result>
	</action>
</package>
<package name="secure" extends="struts-default" namespace="/secure">
   <action name="dashboard" class="lee.Dashboard">
     <result name="success">dashboard.jsp</result>     
     <!-- 配置一个 在同一个命名空间中的 redirectAction -->
     <result name="error" type="redirectAction">error</result>
   </action>
   <action name="error">
       <result>error.jsp</result>
   </action>
</package>

   再次声明 redirectAction 也是重定向,所以 此前的 Action 处理结果,请求参数,请求属性都会丢失。

 

 

五。动态结果

  也就是之前说过的 使用表达式语法匹配

 

<action name="crud_*" class="lee.CrudAction" method="{1}">
    <result name="input">/input.jsp</result> 
    <result>/{1}.jsp</result> 
</action>

 上面代码可以处理所有匹配 crud_*.action 的请求。

例如: crud_create.action 请求,系统将调用 lee.CrudAction 类的create()方法来处理。当处理结果为 input 字符串时,将转到 /input.jsp 页面; 当处理结果为 success 字符串时,将转入 create.jsp 页面。

 

以上内容还能使用 OGNL 表达式让请求参数来决定结果

 

 

六。请求参数决定结果

${属性名} 处理请求,属性名 就是对应 Action 实例里的属性 ,而且还能使用完全的 OGNL 表达式, 如下:

${属性名.属性名.属性名}

<action name="crud_*" class="lee.CrudAction" method="{1}">
    <result name="input" type="redirect">edit.action?skill=${curSkill.name}</result> 
</action>

 对于上面的代码, 要求在对应的 Action 实例里 包含 curSkill 属性,并且 curSkill 属性必须包含 name 属性,否则${curSkill.name} 将为 null

 

例子:

class MyAction extends ActionSupport{
	private String target;

	public String getTarget() {
		return target;
	}

	public void setTarget(String target) {
		this.target = target;
	}
	
	public String execute() throws Exception{
		this.target="yo";
		return SUCCESS;
	}
	
}
 
<action name="myAction" class="lee.MyAction">
    <result>/${target}.jsp</result> 
</action>

 以上 action 会跳转到 myAction 中 target 的值 所指向的页面

 

 

七。全局结果

<package name="public" extends="struts-default">
    <global-results>
        <result name="success">/&{target}.jsp</result>
    </global-results>
	<action name="Login" class="lee.LoginAction" />   	 
</package>

 注意:

  1. Action 内没有匹配任何的结果,但这不会影响系统运转,因为有一个 success 的全局 result ,这个全局的结果的作业范围对所有的 Action 都有效。

  2. 如果 Action 里包含一个与全局结果同名的 result ,则 Action 里的局部 result 会覆盖 global-results 里的 result。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值