- 注解
使用注解可以用来替换struts.xml配置文件,以提高我们的开发效率。
建议:注解的使用是建立在对struts.xml配置文件十分熟练的基础上。
注:单独使用struts2框架时注解,不需要配置注解扫描。
-
- Struts2使用注解开发需要遵循一些规范
- Action要必须继承ActionSupport父类
- Action所在的包名必须以 .action 结尾
-
- 引入依赖(导包)
<!--引入struts注解依赖--> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-convention-plugin</artifactId> <version>2.5.10</version> </dependency> |
-
- 通过配置文件学习对应的注解
注解 | 代替 | 示例 |
@Namespace | <package>中的namespace属性 用于指定名称空间,一般为“/”。 | @Namespace(value=”/user”) 简写:@Namespace(”/user”) public Class UserAction{} 注:用在Action类上 |
@ParentPackage | <package>中的extends属性 用于指定父包,一般为struts-default | @ParentPackage(value=”struts-default”) 简写:@ParentPackage(”struts-default”) public Class UserAction{} 注:用在Action类上 |
@Action | 替代<action>元素 value:指定访问路径,替代name属性 results:指定局部结果,替代result属性 | @Action(value="/add", results={}) public String execute() {} 注:用在Action类中的方法上 |
@Result | 替代<result>元素 name:指定结果码,替代name属性 location:指定返回视图 Type:指定跳转类型 | @Action(value="add", results={ @Result(name="success", location="/index.jsp"), @Result(name="input", location="/add.jsp") }) 注:用在@Action注解的results中 |
@interceptorRefs | 表示action的多个拦截器。这个属性也是一个数组属性,因此可以定义多个拦截器 |
|
@exceptionMappings | 这是异常属性,它是一个ExceptionMapping的数组属性,表示action的异常,在使用时必须引用相应的拦截器 |
|
注解案例:
************************************************************ struts.xml配置: <package extends=”struts-default” namespace=”/user”> ************************************************************ @ParentPackage("struts-default") @Controller //控制层的Spring注解 @Scope("prototype") //支持多例 @Namespace(value="/user") //表示当前Action所在命名空间 publilc class TestAction extends ActionSupport{
@Resource private User user; //使用域驱动模式接收表单参数
************************************************************ struts.xml配置: <action name="addUser" class="com.zking.Test" method="addUser"> <result name="success">/index.jsp</result> <result name="input">/error.jsp</result> </action> ************************************************************ @Action(value="addUser", results={ @Result(name="success", location="/index.jsp", type=”redirect”), @Result(name="input", location="/error.jsp") }) public String addUser(){ …… return SUCCESS; }
@Action(value="delUserById", results={ @Result(name="success", location="/index.jsp", type=”redirect”) }) public String delUserById(){ …… return SUCCESS; }
@Action( //表示请求的Action及处理方法 value="login", //表示action的请求名称 results={ //表示结果跳转 @Result(name="success",location="/success.jsp",type="redirect"), @Result(name="login",location="/login.jsp",type="redirect"), @Result(name="error",location="/error.jsp",type="redirect") }, interceptorRefs={ //表示拦截器引用 @InterceptorRef("defaultStack"), @InterceptorRef("timer") }, exceptionMappings={ //映射映射声明 @ExceptionMapping(exception="java.lang.Exception",result="error") } ) public String login() throws Exception { int i = 1/0 ;
if ("admin".equals(user.getUsercode()) && "admin".equals(user.getUserpswd())) {
Map session = ActionContext.getContext().getSession(); session.put("session_user", user);
return "success"; } else { return "login"; } } } |