【转】Struts2注解使用解析

如果希望使用 struts2 的注解功能,必须使用一个包 struts2-convention-plugin-2.1.8.1.jar ,我使用的环境是 struts2.1.8.1 。如果你使用了不同的版本,找名字就行。

在以上所述的 jar 文件中定义了一系列的注解,其中比较主要的是:

  • @ParentPackage ,这个注解对应了 xml 文件中的 package 节点,它只有一个属性叫 value ,其实就是 package name 属性;
  • @Namespace ,命名空间,也就是 xml 文件中 <package> namespace 属性;
  • @Action ,这个注解对应 <action> 节点。这个注解可以应用于 action 类上,也可以应用于方法上。这个注解中有几个属性:
    • value() ,表示 action URL ,也就是 <action> 节点中的 name 属性;
    • results() ,表示 action 的多个 result ;这个属性是一个数组属性,因此可以定义多个 Result
    • interceptorRefs() ,表示 action 的多个拦截器。这个属性也是一个数组属性,因此可以定义多个拦截器;
    • params() ,这是一个 String 类型的数组,它按照 name/value 的形式组织,是传给 action 的参数;
    • exceptionMappings() ,这是异常属性,它是一个 ExceptionMapping 的数组属性,表示 action 的异常,在使用时必须引用相应的拦截器;
  • @Result ,这个注解对应了 <result> 节点。这个注解只能应用于 action 类上。这个注解中也有几个属性:
    • name() ,表示 action 方法的返回值,也就是 <result> 节点的 name 属性,默认情况下是【 success 】;
    • location() ,表示 view 层文件的位置,可以是相对路径,也可以是绝对路径;
    • type() ,是 action 的类型,比如 redirect
    • params() ,是一个 String 数组。也是以 name/value 形式传送给 result 的参数;

实际上, struts2 中的主要注解就是这些,当然了,还有上面提到的 @interceptorRef @exceptionMapping ;基本上,掌握了这些注解就可以了。

但是如果想让这些注解真正工作,必须在配置文件增加几个常量的定义:

  • struts.convention.default.parent.package :这个常量表示缺省的包名是什么,因为在实际应用中,我们常常定义一个缺省的包,这个包中定义了一大堆的拦截器等等,然后其他的包继承自这个包。这个常量可以配也可以不配;
  • struts.convention.package.locators :这个常量表示你的 action 类的 java 包的包名的后缀是啥:比如 action 。这个常量也可以不配;
  • struts.convention.package.locators.basePackage :这个常量表示你的 action 类的 java package 的名字是啥;这个常量也可以不配;
以上三个常量都是辅助作用的,为了让注解真正的工作,必须在配置文件中增加 <package> 节点的配置,至少是 <package name="myPackage" extends="struts-default" /> ,这样注解就可以使用了。

你可能感兴趣的:(struts2)