Result——Struts2的处理结果

来源:互联网 发布:鸡兔同笼c语言程序 编辑:程序博客网 时间:2024/05/12 11:39

       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不同的值,就会指向不同的视图资源。

 

原创粉丝点击