注解配置Struts2 Action

 

一. 基础配置

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)

该例中没有使用nametype参数,所以它们为默认值。

说明: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

 

你可能感兴趣的:(struts2)