Struts2注解配置之@Results和@Result(三)

在Struts2注解配置之@Action(二)中对于结果页面我还是采用Convention Plugin的约定,但是这一节我需要利用@Results和@Result改变一下这种约定。以及@Results和@Result对类和方法进行注解后所产生的效果。
还是先看一段代码:
[java]  view plain  copy
  1. package com.example.actions;  
  2.   
  3. import org.apache.struts2.convention.annotation.Action;  
  4. import org.apache.struts2.convention.annotation.Result;  
  5. import org.apache.struts2.convention.annotation.Results;  
  6.   
  7. import com.opensymphony.xwork2.ActionSupport;  
  8.   
  9. @Results( { @Result(name = "global", location = "/global.jsp") })  
  10. public class HelloWorld5 extends ActionSupport {  
  11.   
  12.     @Action(value = "/H5/url", results = { @Result(name = SUCCESS, location = "/H5/success.jsp"),  
  13.             @Result(name = "failure", location = "/H5/fail.jsp") })  
  14.     public String execute() {  
  15.         if (System.currentTimeMillis() % 3 == 0) {  
  16.             return "failure";  
  17.         } else if (System.currentTimeMillis() % 3 == 1) {  
  18.             return SUCCESS;  
  19.         } else {  
  20.             return "global";  
  21.         }  
  22.     }  
  23.   
  24.     @Action("globalTest")  
  25.     public String global() {  
  26.         return "global";  
  27.     }  
  28.   
  29.     @Action(value = "globalOverWrite", results = { @Result(name = "global", location = "/H5/globalOverWrite.jsp") })  
  30.     public String globalOverWrite() {  
  31.         return "global";  
  32.     }  
  33.   
  34. }  



  • 使用@Result注解改变Convention Plugin的约定跳转页面。
在代码的String execute()方法上进行了    @Action(value = "/H5/url", results = { @Result(name = SUCCESS, location = "/H5/success.jsp"),
            @Result(name = "failure", location = "/H5/fail.jsp") })注解。如果@Action(...)没有 results = { @Result(name = SUCCESS, location = "/H5/success.jsp"),
            @Result(name = "failure", location = "/H5/fail.jsp") }
,那么依据Convention Plugin的约定,结果页面会是/H5/url.jsp。加上红色字体的部分后,execute()方法执行后,会根据红色字体的配置,将结果跳转到对应的页面。
  • 对Action类添加@Result注解,@Result将被Action类中的所有方法所共享。
仔细观察上述代码,在HelloWorld5上进行了@Results( { @Result(name = "global", location = "/global.jsp") })注解。这意味着该类及其子类的所有方法都可以返回一个名字为“global”的结果页面。而这个页面是"/global.jsp"。这就使得不用在每个需要跳转到"/global.jsp"的方法都进行@Result(name = "global", location = "/global.jsp")注解。这在实际工作中也是非常常见的一种情况。可以仔细观察的execute()方法和global()方法。他们都可能跳转到名字为“global”的结果页面(即location属性定义的“/global.jsp”页面)。
  • 对Action类中的方法添加@Result注解,@Result将只作用于被添加的方法。Action类方法上添加的@Result优先级高于Action类上添加的@Result。(前者覆盖后者)
再仔细观察上述代码的globalOverWrite()方法,该方法也跳转到名字为“global”的页面。但是在该方法上使用了@Action(value = "globalOverWrite", results = { @Result(name = "global", location = "/H5/globalOverWrite.jsp") })注解。并且其中@Result(...)注解中也有一个名字为“global”的结果页面定义。此时,该方法的结果页面就会跳转到/H5/globalOverWrite.jsp页面而不是在类上进行注解时候的“/global.jsp”页面。

日后再继续学习@Namespace。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值