package com.tjcyjd.web.action;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.ExceptionMapping;
import org.apache.struts2.convention.annotation.ExceptionMappings;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.ActionSupport;
/**
* Struts2基于注解的Action配置 接下来看这个类和里边的注解的逻辑
* action必须在package中定义,所以action之前定义了package相关,每一个的含义自己参悟,如果不理解说明你对基于xml的配置还不是很熟悉
* 类之前还定义了result和exception
* ,这表示的是全局的result和exception,作用于指定包之下的所有action,并且也可以发现在类之中定义了多个action
*
* action为什么定义在了对应的方法上呢?action定义在哪个方法之上那么这个方法就是这个action调用的方法,
* xml中在定义action的时候默认是调用execute方法,
* 但也提供了指定执行方法的属性,这里定义在对应的方法上就是这个作用;在login这个action中没有定义result
* ,因为在类之前定义了全局result,所以这里可以不定义
*
* 也可以在类之前定义action,这样的话如果在注解中不指定调用方法的话就需要在类中重写execute方法,原因自己脑补。
*/
@ParentPackage("struts-default")
@Namespace("/annotation_test")
@Results({ @Result(name = "success", location = "/main.jsp"),
@Result(name = "error", location = "/error.jsp") })
@ExceptionMappings({ @ExceptionMapping(exception = "java.lange.RuntimeException", result = "error") })
public class LoginAction extends ActionSupport {
private static final long serialVersionUID = 2730268055700929183L;
private String loginName;
private String password;
@Action("login")
// 或者写成 @Action(value = "login")
public String login() throws Exception {
if ("yjd".equals(loginName) && "yjd".equals(password)) {
return SUCCESS;
} else {
return ERROR;
}
}
@Action(value = "add", results = { @Result(name = "success", location = "/index.jsp") })
public String add() throws Exception {
return SUCCESS;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
/*
* Namespace:指定命名空间。
*
* ParentPackage:指定父包。
*
* Result:提供了Action结果的映射。(一个结果的映射)
*
* Results:“Result”注解列表
*
* ResultPath:指定结果页面的基路径。
*
* Action:指定Action的访问URL。
*
* Actions:“Action”注解列表。
*
* ExceptionMapping:指定异常映射。(映射一个声明异常)
*
* ExceptionMappings:一级声明异常的数组。
*
* InterceptorRef:拦截器引用。
*
* InterceptorRefs:拦截器引用组。
*/