Struts2:配置处理结果Result 学习笔记

Action 处理完用户请求后,将返回一个普通字符串,整个普通字符串就是一个逻辑视图名,必须在 struts.xml 文件中完成逻辑视图和物理视图资源的映射。一旦系统收到 Action 返回的某个逻辑视图名,系统就会把对应的物理视图资源呈现给用户。

Struts2在 struts xml 文件中使用<result.../>元素来配置结果,根据<result.../>元素所在位置的不同, Struts2提供了两种结果:

局部结果:将<result.../>作为<action.../>元素的子元素配置。

全局结果:将<result.../>作为<global-results.../>元素的子元素配置。

局部结果

局部结果是通过在<action.../>元素中定义<result.../>子元素进行配置的,一个<action.../>元素可以有多个<result.../>子元素 ,这表示 Action 可以对应多个结果。

配置<result.../>元素时通常需要指定如下两个属性:

name:该属性指定所配置的逻辑视图名

type:该属性指定结果类型

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

该<result.../>元素下<param.../>子元素配置的参数名由 name 属性指定,此处的 name 属性可以为如下两个值。

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

parse:该参数指定是否允许在实际视图名字中使用 OGNL 表达式,该参数值默认为 true 。如果设置该参数值为 false ,则不允许在实际视图名中使用表达式。通常无须修改该属性值。

因为通常无须指定 parse 参数值, 也可以省略type="dispatcher",这是系统将使用默认类型就是type="dispatcher",如果又省略了 name="success"即name属性,系统将采用默认的 name 属性值 success,因此可采用如下简化形式来配置实际视图资源:

<action name="Login" class="LoginAction">
<result>thank_you.jsp</result> 
</action> 

结果类型type

Struts2内建的支持结果类型如下:

chain 结果类型 :Action 链式处理的结果类型。

dispatcher 结果类型:默认结果类型,用于指定使用 JSP 作为视图的结果类型。

freemarker 结果类型:用于指定使用 FreeMarker 模板作为视图结果类型。

httpheader 结果类型:用于控制特殊的 HTTP 行为的结果类型。

redirect 结果类型:用于直接跳转到其他 URL 的结果类型。

redirectAction 结果类型:用于直接跳转到其他 Action 的结果类型。

stream 结果类型:用于向浏览器返回 InputStream (一般用于文件下载)。

velocity 结果类型:用于指定使用 Velocity 模板作为视图的结果类型。

xslt 结果类型:用于与 XML/XSLT 整合的结果类型。

plainText 结果类型:用于显示某个页面的原始代码的结果类型。

plainText 结果类型

使用 plainText 结果类型时可指定如下两个参数:

location:指定实际的视图资源。

charSet:指定输出页面时所用的字符集。

它主要用于显示实际视图资源的源代码,配置代码如下:

<result type="plainText">
<!--指定实际的视图资源-->
<param name="location">welcome.jsp</param>
<!--指定使用指定的字符集来处理页面代码-->
<param name="charSet">GBK</param> 
</result>

在上面的配置片段中,配置<result.../>元素时,并未指定<result.../>元素的 name 属性,意味着 name 属性值为 success ;上面的粗体字代码显式指定了 type 属性值为 plainText 类型,plainText 结果类型指定将视图资源当成普通文本处理,所以该结果类型会导致输出页面的源代码。

redirect结果类型

配置 redirect 类型的结果,可以指定如下两个参数:

location :该参数指定 Action 处理完用户请求后跳转的地址。

parse:该参数指定是否允许在 location 参数值中使用表达式,该参数值默认为 true

指定 redirect 结果类型会将请求 redirect (重定向)到指定的视图资源,重定向会丢失所有的请求参数、请求属性,也会丢失Action 的处理结果。该效果与HttpServletResponse的sendRedirect(String)方法相同。

<action name="login" class="LoginAction">
<!--指定结果的类型为 redirect,这意味着系统该 Action 将重定向到 welcome jsp 页面-->
<result type="redirect">/welcome.jsp</result> 
</action>

使用 redirect 类型的结果时,不能重定向到用/WEB-INF/路径下任何资源,因为重定向相当于重新发送请求,而Web 应用的/WEB-INF/路径资源是受保护资源。

redirectAction结果类型

当需要让一个 Action 处理结束后,直接将请求重定向(是重定向,不是转发) 另一个 Action 时, 就应该使用redirectAction结果类型。

配置 redirectAction 结果类型时,可以指定如下两个参数:

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

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

下面是一个使用 redirectAction 结果类型的配置实例:

<package...> 
<action name="login" class="LoginAction"> 
<!--配置 redirectAction 结果类型的 Result ,重定向另一个命名空间的 Action-->
<result type="redirectAction">
<!--指定重定向的 actionName-->
<param name="actionName">dashboard</param>
<!--指定重定向的 Action 所在的命名空间-->
<param name="namespace">/secure</param> 
</result> 
</action>
<package ...>
<!--定义被转入的 Action-->
<action name="dashboard" class="Dashboard">
<result>/WEB- INF/content/dashboard.jsp</result> 
<!--配置 redirectAction 结果类型的 Result,重定向同一个命名空间的 Action --> 
<result name="error" type="redirectAction">error</result>
</action> 
<action name="error">
<result>/WEB-INF/content/error.jsp</result> 
</action>
</package> 

动态结果

动态结果的含义是指在指定实际视图资源时使用了表达式 ,通过这种语法可以允许 Action 理完用户请求后,动态转入实际的 视图资源。

<action name="crud_*" class="lee.CrudAction" method="{1}">
<result name="input">/WEB-INF/content/input.jsp</result>
<result>/WEB-INF/content/{1}.jsp</result> 
<alllowed-methods>create</allowed-methods> 
</action> 

上面的配置 片段有一个 name="crud_*" 的 Action ,这 Action 可以处理所有匹配 crud_*.action 模式 的请求。例如有一个 crud_create.action 的请求,系统将调用 lee.CrudAction 类的 create()方法来处理用户请求。当Action 处理用户请求结束后,配置了两个结果。当处理结果为 input 字符串时,系统将转/WEB-INF/content/input.jsp页面。当处理结果为 success 字符串 时, 系统将转入 create.jsp 页面。这就是资源的动态生成, crud_create 匹配 crud_*模式时, 第一个星号(*)的值是 create ,因/WEB-INF/content/{1}.jsp的{1}代表 create,对应/WEB-INF/content/create.jsp 资源。

与配置 class 属性和 method 属性相比 ,配置<result.../>元素 ,还允许使用 OGNL 表达式,这种用法允许根据 Action 属性值来定位视图资源。

Action 属性值决定物理视图资源

配置<result.../>元素时, 不仅可以使用${N}表达式形式来指定视图资源,还可以使用${属性名}的方式来指定视图资源。

见如下的例子:

MyAction.java

publc class MyAction extends ActionSupport{
//封装请求参数的 target 成员变量
private String target; 
//省略了所有的 setter getter 方法
public String execute() throws Exception{
addActionMessage (”恭喜您,您己经成功转向 ; 
return SUCCESS ; 
}
...
}

struts.xml例子:

<struts>
...
... 
<package name="lee" extends="struts-default">
<!--配置处理用户请求的 Action-->
<action name="MyAction" class="MyAction">
<!--配置 Result ,使用 OGNL 表达式来指定视图资源-->
<result>/WEB-INF/content/${target}.jsp</result>
</action>
</package>
...
... 
</struts>

<result>/WEB-INF/content/${target}.jsp</result>:这里要求在对应的 Action 类里应该包含 target 属性一一该属性值将决定实际的视图资源。如果没有target 属性游览器则会报错。

全局结果

当在<global-results.../>元素中配置</result.../>元素时,该</result.../>元素配置了一个全局结果,全局结果将对所有的 Action 都有效。

<package name="lee" extends="struts-default">
<!--定义全局结果-->
<global-results>
!一配置 Result ,使用 OGNL 表达式来指定视图资源一〉
<result>/WEB-INF/content/${target}.jsp</result>
</global-results>
<action name="MyAction" class="MyAction"/>
...
...
</package>

上面的配置片段配置了Action ,但在该 Action 没有配置任何的结果一一但这不会影响系统的运转,因为提供了一个名为 success 全局结果,而这个全局结果的作用范围对所有的 Action 都有效。

如果一个 Action 里包含了与全局结果同名的结果,局部结果会覆盖全局结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值