2013年6月4日星期二

Result——Struts2的处理结果

Result——Struts2的处理结果

542人阅读 评论(0) 收藏 举报
       Struts2框架是MVC设计思想的实现,Action就是业务控制器,可以调用业务逻辑模块进行业务处理,Action的处理结果是通过在配置文件中设定result属性来实现的。这是一种典型的松耦合方式,Action不必关心result对应的视图是什么,只是返回一个字符串即可。

一、    处理结果流程
    Struts2框架拦截用户请求后,会匹配相关的Action来处理,Action执行处理完毕后,将返回一个标准的字符串,该字符串在配置文件中对应了一个视图资源名称。Struts2框架是通过配置文件中的result属性将Action和视图资源联系在一起的,这样就实现了独立模块化的设计思想。Result对应的视图资源,就是MVC模式中的视图部分(View)。
二、    配置result
1.       配置result的目的就是告诉Struts2框架,在执行完一个Action后,需要系统做什么。是把一个视图资源呈现给用户还是执行另外一个Actionresult配置起到了一个“路标”的作用。
2.       result按照作用范围可以分为局部result和全局result
局部result 包含在Action定义中,result属性是一个Action的子元素。起作用范围只能在本Action中。
全局result 使用<global-results…/>来定义,其作用范围是所有的Action都可以使用。
下面是result的示例:
 <package name="ch03 " extends="sturts-default "  namespace=" /ch03" >
   <!—定义全局返回类型 -->
   <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>

三、    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>

四、    动态配置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不同的值,就会指向不同的视图资源。

没有评论:

发表评论