struts2注解功能

一、配置web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>com.test.action</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

二、加入注解
@Namespace(value="/test")
@Action(value = "file-manager",
interceptorRefs = {
@InterceptorRef(value = "fileUpload",params={"maximumSize","1024000","allowedTypes","image/pjpeg"}),
@InterceptorRef(value = "basicStack")},
results = {@Result(name = ActionSupport.SUCCESS, location = "/view/file-manager-sucess.jsp"),
@Result(name = ActionSupport.ERROR, location = "/view/file-manager-error.jsp") },
exceptionMappings = {@ExceptionMapping(exception = "java.lang.Exception", result = ActionSupport.ERROR)}
)

验证注解:
@Validations(
requiredStrings={
@RequiredStringValidator(fieldName="username",message="用户名不能为空!"),
@RequiredStringValidator(fieldName="telNum",message="电话号码不能为空!")
},
regexFields={@RegexFieldValidator(fieldName="telNum",expression="^(//+86|0|1)//d{10,11}$",
message="电话号码格式不正确!")}
)

跳过验证注解:
@SkipValidation

三、Convention的Annotation
1)与Action相关的两个Annotation是@Action 和@Actions
2)@Action中可指定一个value属性。类似于指定<action name=””/>属性值
3)@Action中还可以指定一个params属性,该属性是一个字符串数组,用于该Acion指定的参数名和参数值。params属性应遵守如下格式:{“name1”,”value1”,”name2”,”value2”}
4)@Actions 也用于修饰Action类里的方法,用于将该方法映射到多个URL.@Actions用于组织多个@Action.因此它可将一个方法映射成多个逻辑Action。

四、与Result配置相关的Annotation
1)@ResultPath @Result 和Results
2)@Results用于组织多个@Result因此它只需指定一个value属性值,该value属性值为多个@Result
3)@Result相当于struts.xml文件中的<result/>元素。使用@Result必须指定一个name属性,相当于<result name=””/>另外,它还有几个可选的属性。
☆ type 相当于<result type=””/>指定返回视图资源的类型
☆ location 相当于<result>…..</result>中间部分,用于指定实际视图位置
☆ params:该属性相当于<result/>元素里多个<param../>子元素的作用,用于为该Result指定参数值。该属性应满足{“name1”,”value1”,”name2”,”value2”}格式
4)@Result有以下两种用法
1.Action级的Result映射:以@Actions组合多个@Action后修饰的Action类。这种Result映射对该Action里的所有方法都有效。
2.方法级Result映射:将多个@Result组成数组后作为@Action的results属性值。这种Result映射仅对被修饰的方法有效。
5)@ResultPath则用于修饰包和Action类,用于改变被修饰Action所对应的物理视图资源的根路径。举例说:默认情况下,Convention都会到WEB-INF/content路径下找物理视图资源,一旦我们使用@ResultPath("/view")修饰该Action,系统将回到view目录下寻找物理视图资源。

五、与包和命名空间相关的Annotation:
@Namespace:修饰Action类或其所在的包。该Annotation中指定一个value属性值,用于指定被修饰的Action所在的命名空间
@Namespaces:修饰Action类或其所在的包,用于组合多个@Namespace
@ParentPackage: 用于指定被修饰的Action所在包的父包。

六、与异常处理相关的Annotation
@ExceptionMappings 用于组织多个@ExceptionMapping,因此它只需指定一个value属性值,该value属性值为多个@ExceptionMapping。
@ExceptionMapping 用于定义异常类和物理视图之间的对应关系,也相当于struts.xml文件里<exception-mapping../>元素的作用 使用时,必须注意以下两个属性:
exception: 用于指定异常类
result:用于指定逻辑视图
@ExceptionMpping有如下两种用法
Action级的异常定义:以@ExceptionMappings组合多个@ExceptionMapping后修饰的Action类。这种异常定义对Action中的所有方法有效
方法级的异常定义:将多个@ExceptionMapping组成数组后作为@Action的exceptionMappings属性值,这种异常定义仅对被修饰的方法有效。

七、与拦截器配置相关的Annotation
与拦截器配置的Annotation有@InterceptorRef、@InterceptorRefs和@DefaultInterceptorRef
@InterceptorRefs用于组织多个@InterceptorRef,因此它只需要指定一个value属性值,该value属性值为多个@InterceptorRef
@InterceptorRef用于为指定Action引用lanjieq或者是拦截器栈。也就相当于strut.xml中位于<action../>元素内部的<interceptor-ref../>子元素的作用。使用@InterceptorRefAnnotation时,必须制定一个value属性,用于指定所引用的拦截器或拦截器栈的名字。相当于<interceptor-ref../>子元素里name属性的作用。

八、查看struts2配置
为了看到struts2应用里的Action等各种资源的影射情况,struts2提供了Config Browser插件。
使用方法:将struts2-config-browser-plugin-2.1.6.jar文件复制到struts2应用的WEB-INF/lib目录中。
打开首页地址:http://localhost:8080/应用名字/config-browser/actionNames.action 这里可以看到Config Browser插件的首页。


多语言切换:
ActionContext.getContext().getSession().put("WW_TRANS_I18N_LOCALE", locale); locale为:国家语言,例如:Locale locale = new Locale("zh","CN");

==================

转载于:http://ajava.org/course/open/16827.html

在Action中提供了下列几种注解:

ParentPackage

Namespace

Result

Results

注解
描述

Namespace
所期望的命名空间(在“struts.xml”文件中也有定义)的字符串值

ParentPackage
所期望的父package的字符串值

Results
“Result”注解列表

Result
提供了Action结果的映射,它有四个属性:

² name ——action方法的结果名

² type—— 结果类型

² value——任意的结果值。可以是rediect结果类型对应的action名,也可以是dispatcher结果类型对应的JSP

² parameters ——字符串参数组成的数组


使用方式如下:

  1. @ParentPackage(value="struts-default")
  2. @Namespace (value="/test")
  3. @Result (name="success",value="/userSuc.jsp")
  4. @Results ({
  5. @Result (name="success",value="/userSuc.jsp",type=org.apache.struts2.dispatcher.ServletRedirectResult.class),
  6. @Result (name="input",value="/main.jsp",type=org.apache.struts2.dispatcher.ServletRedirectResult.class)
  7. })

在使用这些注解的时候,还需要进行额外的一些配置。在web.xml的filter配置中,需要指定哪些package是使用了注解的。配置如下所示,其中参数名必须为“actionPackages”,参数的值就是package的名称列表。

  1. <filter>
  2. <filter-name>struts</filter-name>
  3. <filter-class>
  4. org.apache.struts2.dispatcher.FilterDispatcher
  5. </filter-class>
  6. <init-param>
  7. <param-name>actionPackages</param-name>
  8. <param-value>user.actions,other.actions</param-value>
  9. </init-param>
  10. </filter>

被配置过的每一个package和它的子package都会被扫描到,看其中哪些类实现了Action或者类名以“Action”结尾,然后注解就会被加入到运行时配置中去。如果没有使用namespace注解的话,那么命名空间就会由package名来生成。把“actionPackages”配置值中使用的package名称截掉,就得到了命名空间。也就是说,如果某个被配置好的action的名字是“actions.admin.user.AddAction”,而“actionPackages”的值为“actions”,那么这个action的命名空间就是“/admin/user”。

我们知道通常情况下,Struts2是通过struts.xml配置的。但是随着系统规模的加大我们需要配置的文件会比较大,虽然我们可以根据不同的系统功能将不同模块的配置文件单独书写,然后通过<include>节点将不同的配置文件引入到最终的struts.xml文件中,但是毕竟还是要维护和管理这些文件,因此也会给维护工作带来很大的困扰。为了解决这个问题,可以考虑使用struts2的注解。实际上struts2中最主要的概念就是packageaction以及Interceptor等等概念,所以只要明白这些注解就可以了。

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

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

  • @ParentPackage,这个注解对应了xml文件中的package节点,它只有一个属性叫value,其实就是packagename属性;
  • @Namespace ,命名空间,也就是xml文件中<package>namespace属性;
  • @Action ,这个注解对应 <action> 节点。这个注解可以应用于 action 类上,也可以应用于方法上。这个注解中有几个属性:
    • value(),表示actionURL,也就是<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类的javapackage的名字是啥;这个常量也可以不配;

以上三个常量都是辅助作用的,为了让注解真正的工作,必须在配置文件中增加<package>节点的配置,至少是<package name="myPackage" extends="struts-default" />,这样注解就可以使用了。

 

1、web.xml

Java代码 复制代码 收藏代码
  1. <!-- struts2 配置 -->
  2. <filter>
  3. <filter-name>struts2</filter-name>
  4. <filter-class>
  5. org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  6. </filter-class>
  7. <init-param>
  8. <param-name>actionPackages</param-name>
  9. <param-value>com.yz.webapp.action</param-value>
  10. </init-param>
  11. </filter>
  12. <filter-mapping>
  13. <filter-name>struts2</filter-name>
  14. <url-pattern>/*</url-pattern>
  15. </filter-mapping>
<!-- struts2 配置 -->
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
		</filter-class>
		<init-param>
			<param-name>actionPackages</param-name>
			<param-value>com.yz.webapp.action</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>


struts.properties

Java代码 复制代码 收藏代码
  1. #修改时重新加载
  2. struts.configuration.xml.reload = true
  3. #打印更多错误信息
  4. struts.devMode = true
  5. #注解扫描的包结尾名
  6. struts.convention.package.locators = action
  7. #映射扩展名
  8. struts.action.extension = html
  9. #结果资源所在路径
  10. #struts.convention.result.path = /WEB-INF/pages
#修改时重新加载
struts.configuration.xml.reload = true
#打印更多错误信息
struts.devMode = true
#注解扫描的包结尾名
struts.convention.package.locators = action
#映射扩展名
struts.action.extension = html
#结果资源所在路径
#struts.convention.result.path = /WEB-INF/pages


2、action 类名上加注解

Java代码 复制代码 收藏代码
  1. @Namespace ("/ssi")
  2. @ParentPackage("json-default")
  3. @Action (value = "admin", results = {
  4. @Result (name = "success", location = "/WEB-INF/pages/admin.jsp"),
  5. @Result (name = "json", type = "json", params = { "excludeProperties","adminMgr" }) })
  6. public class AdminAction extends BaseAction{}
@Namespace("/ssi")
@ParentPackage("json-default")
@Action(value = "admin", results = {
		@Result(name = "success", location = "/WEB-INF/pages/admin.jsp"),
		@Result(name = "json", type = "json", params = { "excludeProperties","adminMgr" }) })
public class AdminAction extends BaseAction{}


多个Action

Java代码 复制代码 收藏代码
  1. @Namespace ("/msa")
  2. @Result (name = "json", type = "json", params = { "excludeProperties",
  3. ".*Manager,.*\\.authorities,.*\\.roles,.*\\.fileCon" })
  4. @Actions (value = {
  5. @Action (value = "foreignship", results = { @Result (name = "success", location = "foreignship/foreignship.jsp") }),
  6. @Action (value = "foreignshipsee", results = { @Result (name = "success", location = "foreignship/foreignshipsee.jsp") }) })
  7. public class TMsaForeignShipArchivesAction extends BaseAction{}
@Namespace("/msa")
@Result(name = "json", type = "json", params = { "excludeProperties",
    ".*Manager,.*\\.authorities,.*\\.roles,.*\\.fileCon" })
@Actions(value = {
    @Action(value = "foreignship", results = { @Result(name = "success", location = "foreignship/foreignship.jsp") }),
    @Action(value = "foreignshipsee", results = { @Result(name = "success", location = "foreignship/foreignshipsee.jsp") }) })
public class TMsaForeignShipArchivesAction extends BaseAction{}



在类方法上加注解

Java代码 复制代码 收藏代码
  1. //@Action(value = "add", results = { @Result(name = "success", location = "/index.jsp") })
  2. @Action (value = "save")
  3. public String save() {
  4. try{
  5. adminMgr.insert("insertYz_admin", admin);
  6. }catch(Exception e){
  7. msg = e.toString();
  8. success = false;
  9. }
  10. return this.SUCCESS;
  11. }

 

你可能感兴趣的:(struts2注解功能)