一. 基础配置
1. ParentPackage注解的参数
参数 | 类型 | 是否必需 | 默认值 | 描述 |
value | String | 是 | 无 | 指定要继承的父包 |
如果注解中只有一个名为value的参数,或其他参数都有默认值,那么在为value参数设值时可以忽略value和等号(=)。
例:
@ParentPackage(value="struts-default")
@ParentPackage("struts-default")
2. Namespace注解的参数
参数 | 类型 | 是否必需 | 默认值 | 描述 |
value | String | 是 | 无 | 指定action所属的名称空间 |
例:
@Namespace("/secure")
说明:命名空间取名时,以斜杠(/)开头。
3. Result注解的参数
参数 | 类型 | 是否必需 | 默认值 | 描述 |
name | String | 否 | Action.SUCCESS | 指定result的逻辑名,即结果代码 |
value | String | 是 | 无 | 指定result对应的资源的URL |
type | Class | 否 | NullResult.class | 指定result的类型 |
param | String[ ] | 否 | { } | 为result传递参数,格式为:{key1,value1,key2,value2} |
例:
@Result("/success.jsp")
@Result(name="register",value="/register.jsp",param={},type=ServletDispatcherResult.class)
该例中没有使用name和type参数,所以它们为默认值。
说明:type参数的默认值是NullResult.class,如果type参数是NullResult.class,则struts2框架在解析result的配置时,使用默认的结果类型(ServletDispatcherResult)来替换NullResult。
注意:type是类,不是字符串,因此不需要使用””将该注解参数值括起来。
4. Results注解的参数
配置多个result。该注解只有一个参数value。使用时候可以忽略value和等号(=)。
参数 | 类型 | 是否必需 | 默认值 | 描述 |
value | Result[ ] | 是 | 无 | 为action定义一组result映射 |
例:
@Results({
@Result(name="input",value="/input.jsp"),
@Result(name="error",value="/error.jsp",type=ServletDispatcherResult.class)
})
在上面的例子中定义了两个result映射。一个逻辑名是input,资源位置是/input.jsp;另一个逻辑名是error,资源位置是/error.jsp.
二. 使用注解配置Action的注意事项
① 与action配置相关的4个注解只能用在类级别上。
② 需要在web.xml文件中为FilterDispatcher过滤器设置actionPackages参数,指定包含了Action类(类使用了注解)的包的列表,多个包之间以逗号(,)分隔。这些包和它们的子包都将被扫描,在指定包中的所有实现了Action接口的类,或以“Action”结尾的类都将被检测。后者允许我们编写POJO Action类,而不需要实现Action接口。
③ 包名、名称空间名和action名的产生方式如下:
包名: Action类所在的包作为action的包名。
命名空间:除了使用Namespace注解指定名称空间外,也可以通过子包名来产生名称空间。
例:Action类所在的包为com.xxx.action,如果actionPackages参数指定的包是com.xxx,那么“/action”将作为名称空间的名字。
action名:通过Action的类名来产生action的名字。若类名以“Action”结尾,那么类名中的“Action”将被去掉,剩余部分将首字母变为小写作为action的名字。
例:action的类名是LoginAction,那么产生的action的名字是login.
例:若Action的完整类名是com.xxx.action.LoginAction。
则,
actionPackages参数的配置为com.xxx
action的包名为com.xxx.action
action所属的命名空间是/action
action的名字是login
可以通过http://localhost:8080/myapp/action/login.action来访问LoginAction。
④如果你想让你的包继承struts-default包,无须使用ParentPackage注解,在框架内部,会自动让你的包继承struts-default包。
三. 使用注解配置Action实例
一个Action和三个页面。三个页面配置为Result映射。
实例开发步骤如下:
第一步:编写success.jsp,input.jsp,error.jsp页面。
第二步:编写Action类
@Namespace("/test")
@Result("/success.jsp")
@Result({
@Result(name="input",value="/input.jsp"),
@Result(name="error",value="/error.jsp".type=ServletDispatcherResult.class)
})
public class AnnotationAction implementsAction{
public String execute() throws Exception{
return SUCCESS;
}
public String input() throws Exception{
return INPUT;
}
public String error() throws Exception{
return ERROR;
}
}
第三步:配置web.xml
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class > <init-param> <param-name>actionPackages</param-name> <param-value>com.xxx.action</param-value> </init-param> </filter> <filter-mapping> <filter-name>struts2</ filter-name> <url-pattern>/*</ url-pattern > </ filter-mapping>
第四步:测试
http://localhost:8080/myapp/test.annotation.action
http://localhost:8080/myapp/test.annotation!input.action
http://localhost:8080/myapp/test.annotation!error.action