Result——Struts2的处理结果

        Struts2框架是MVC设计思想的实现,Action就是业务控制器,能够调用业务逻辑模块进行业务处理,Action的处理结果是经过在配置文件中设定result属性来实现的。这是一种典型的松耦合方式,Action没必要关心result对应的视图是什么,只是返回一个字符串便可。浏览器

1、 处理结果流程框架

Struts2框架拦截用户请求后,会匹配相关的Action来处理,Action执行处理完毕后,将返回一个标准的字符串,该字符串在配置文件中对应了一个视图资源名称。Struts2框架是经过配置文件中的result属性将Action和视图资源联系在一块儿的,这样就实现了独立模块化的设计思想。Result对应的视图资源,就是MVC模式中的视图部分(View)。jsp

2、 配置result模块化

1. 配置result的目的就是告诉Struts2框架,在执行完一个Action后,须要系统作什么。是把一个视图资源呈现给用户仍是执行另一个Actionresult配置起到了一个“路标”的做用。编码

2. result按照做用范围能够分为局部result和全局resultspa

局部result 包含在Action定义中,result属性是一个Action的子元素。起做用范围只能在本Action中。插件

全局result 使用<global-results…/>来定义,其做用范围是全部的Action均可以使用。设计

下面是result的示例:xml

<package name="ch03 " extends="sturts-default " namespace=" /ch03" >ci

<!—定义全局返回类型 -->

<global-results>

<result name="global-result">/welcome.jsp</result>

</global-results>

<action name="Regist" class="ch03.Regist">

<!—定义局部返回类型 -->

<result name="success" type="dispatcher">/ch03/success.jsp</result>

<result name="input">/ch03/regist.jsp</result>

</action>

</package>

3、 result的类型

Struts2框架支持多种视图技术,例如JSPFreeMarker等。当一个Action执行完用户请求后,会返回一个标准的字符串,这个字符串就是逻辑视图名称,该逻辑视图名称并无与任何视图技术联系在一块儿。视图技术或者说使用的result类型,是在配置文件中指定的,即指定result元素的type属性来实现。

Struts2框架默认支持的result类型以下:

chainAction链式处理的result类型。

chart:用于整合JfreeChartresult类型。

dispatcher:用于整合JSPresult类型。

freemarker:用于整合FreeMarkerresult类型。

httpheader:用于处理特殊HTTP行为的result类型。

jasper:用于整合JasperReportresult类型。

jsf 用于整合JSF类型。

redirect:用于重定向的result类型。

redirect-action:用于重定向到其余Actionresult类型。

stream:用于向浏览器返回一个Inputstream

tites:用于整合Tilesresult类型。

velocity:用于整合Velocityresult类型。

xslt:用于整合XML/XSLTresult类型。

plaintext:用于显示页面的原始代码的result类型。

说明:以上是Struts2框架的内建的result类型,都在struts-default.xml中定义的,系统会自动加载该result类型。另一种result类型是采用插件的方式来支持的。

Action-chain类型示例:

<package name="ch03 " extends="sturts-default " >

<!—定义user, result指向Regist Action -->

<action name="user" class="…">

<result type="chain" >Regist</result>

</action>

<action name="Regist" class="…">

<!—连接到另一个命名空间-->

<result type="chain">

<param name="namespace">/secure</param>

<param name="actionName">check</param>

</result>

</action>

</package>

<!—定义包secure,命名空间为secure -->

<package name="secure " extends="sturts-default " namespace="/secure" >

<action name="check" class="…">

<result>/secure/check.jsp</result>

</action>

</package>

4、 动态配置result

前面介绍的result配置都是以硬编码的方式保存在struts.xml文件中,实际上,Struts2框架提供了动态配置result的功能。动态配置result是指在struts.xml配置文件中,配置Action中的result时,可使用表达式或通配符来定位视图资源,经过这种方式,来动态实现返回不一样的视图资源。

1. 使用通配符动态配置result

struts.xmlAction配置中,通配符不单单可使用在method配置上,classresult均可以使用通配符。 以下示例:

<package name="ch02" extends="sturts-default " >

<!—通配符配置result -->

<action name="Login_*" class="ch02.Login_{1}">

<result name="success" >/ch02/{1}.jsp</result>

</action>

</package>

如上代码中使用了通配符,配置了一个名为Login_*Action,这个Action能够处

理全部匹配Login_*.action的用户请求。例如,用户产生一个URL请求

Login_Bank.actionStruts2框架会先在struts.xml文件中查找是否有名字为

Login_Bank的配置,若是找不到,则匹配Login_*Action配置,

框架会将ch02.Login_{1}中的{1}匹配为Bank,即对应ch02.Login_Bank

Action实现类。一样在result配置中,也会匹配为/ch02/Bank.jsp的实际视图资

源。

2. 使用OGNL动态配置result

通常状况下,若是访问Action实例中的属性,可使用${属性名}表达式,实际上,一个OGNL的完整表达式应该是${属性名.属性名.属性名}。下面的实例演示使用OGNL动态配置result

<package name="ch02" extends="sturts-default " >

<!—使用OGNL表达式配置result-->

<action name="Login_Bank" class="ch02.Login_Bank">

<result name="success" >/ch02/${bankname}.jsp</result>

</action>

</package>

注意: ${bankname}是指Action中的bankname的属性值,Action实例赋予

bankname不一样的值,就会指向不一样的视图资源。

相关文章
相关标签/搜索