您的位置:首页 > 编程语言 > Java开发

Struts2入门(7): 注解

2017-08-12 15:33 330 查看

Struts2 注解

Struts 2 提供类类似 Servlet3 的注解,用于简化 struts.xml 的Actio配置,在使用注解的情况下,甚至可以完全不使用 struts.xml 文件来进行相关的配置;
以下是一个使用注解代替 struts.xml 进行 Action 映射配置的示例:demo.CheckAction该Action是一个简单的表单提供验证处理逻辑;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.validator.annotations.*;

//配置结果视图
@Results({
@Result(name="success",location="/success.jsp"),
@Result(name="input",location="/login.jsp")
})
public class CheckAction {
private String name;
private String age;

//配置Action映射
@Action(value="/check")
public String execute() throws Exception{
return "success";
}
//配置数据验证
@RequiredFieldValidator(message="The name is required")
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
//配置数据验证
@IntRangeFieldValidator(message="Age must be in between 18 and 70",min="18",max="65")
public String getAge(){
return age;
}
public void setPassword(String age){
this.age = age;
}

}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

<!--配置struts启动参数-->
<init-param>
<param-name>struts.devMode</param-name>
<param-value>true</param-value>
</init-param>

</filter>

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

以下是一些常用的注释类型:

动作相关注释

@Namespace 命名空间注释

@ Namespace注释允许在Action类中,而不是基于零配置的约定动作的命名空间的定义;
@Namespace("/content")
public class TestAction{
...
}

@Result @Results 结果注释

@ Result注解允许在Action类中,而不是一个XML文件中定义的动作结果;
@ Results注解定义了一套动作的结果;
@Result(name="success", value="/success.jsp")
public class TestAction{
...
}
@Results({
@Result(name="success", value="/success.jsp"),
@Result(name="error", value="/error.jsp")
})
public class TestAction{
...
}


拦截相关注释

@After

@After注解标志着一个需要调用后的主要操作方法和执行结果的操作方法;
public class TestAction{
@After
public void isValid() throws ValidationException {
// validate model object, throw exception if failed
}
public String execute() {
// perform secure action
return SUCCESS;
}
}

@Before

@ Before注释标记需要一个操作方法的主要操作方法之前被调用执行结果;
public class TestAction{
@Before
public void isAuthorized() throws AuthenticationException {
// authorize request, throw exception if failed
}
public String execute() {
// perform secure action
return SUCCESS;
}
}

@BeforeResult

@ BeforeResult注解标志着一个结果之前需要执行的操作方法;
public class TestAction{
@BeforeResult
public void isValid() throws ValidationException {
// validate model object, throw exception if failed
}

public String execute() {
// perform action
return SUCCESS;
}
}

验证相关注释

@RequiredFieldValidator 字段非空验证 

这验证注解检查一个字段不为空;
public class TestAction{
private String id;
@RequiredFieldValidator(message = "Default message", key = "i18n.key", shortCircuit = true,trim = true)
public String getId() {
return id;
}
}
@StringLengthFieldValidator 字段长度验证
改验证检查字符串字段是否为合适的长度;
public class TestAction{
private String name;
@StringLengthFieldValidator(message = "Default message", key = "i18n.key", shortCircuit = true, trim = true, minLength = "1",  maxLength = "12")
public String getName() {
return name;
}
}

@RegexFieldValidator 字段正则表达式验证

该注解使用正则表达式验证一个字符串字段;
public class TestAction{
private String id;
@RegexFieldValidator( key = "regex.field", expression = "^\\d{4}-\\d{8}$")
public String getId() {
return id;
}
}
@DoubleRangeFieldValidator 浮点数检查验证
该验证注解验证double字段的范围;
public class TestAction{
private String income;
@DoubleRangeFieldValidator(message = "Default message", key = "i18n.key", shortCircuit = true, minInclusive = "0.314", maxInclusive = "99.987")
public String getIncome() {
return income;
}
}

@IntRangeFieldValidator 整型数检查验证

该验证注解验证int字段的范围;
public class TestAction{
private String age;
@IntRangeFieldValidator(message = "Default message",key = "i18n.key", shortCircuit = true,  min = "0", max = "42")
public String getAge() {
return age;
}
}

@DateRangeFieldValidator 日期检查验证

该验证注解检查日期字段的值在指定范围内;
public class TestAction{
private String date;
@DateRangeFieldValidator(message = "Default message", key = "i18n.key", shortCircuit = true,  min = "2010/01/01", max = "2020/12/31")
public String getDate() {
return date;
}
}

@EmailValidator 邮件字段格式检查验证

该验证注解检查一个字段是一个有效的E-mail地址;
public class TestAction{
private String email;
@EmailValidator(message = "Default message", key = "i18n.key", shortCircuit = true)
public String getEmail() {
return email;
}
}

@UrlValidator URL格式验证

public class TestAction{
private String uri;
@UrlValidator(message = "Default message", key = "i18n.key", shortCircuit = true)
public String getUri() {
return uri;
}
}

@Conversion 类型转换验证

该注解验证类型装换是否合法;
@Conversion()
public class TestAction {
}
@CreateIfNull 
该注解设置类型转换CreateIfNull是否合法;
public class TestAction{
@CreateIfNull( value = true )
private List<User> users;
}

@Element 

该注解设置元素进行类型转换 ;
public class TestAction{
@Element( value = demo.User )
private List<User> users;
}

@Key 指定类型转换验证

该注解设置进行类型转换的关键类型;
public class TestAction{
@Key( value = java.lang.Long.class )
private Map<Long, User> userMap;
}

@KeyProperty 关键域类型转换验证

该注解设置类型转换关键域;
@KeyProperty( value = "userName" )
protected List<User> users = null;

@TypeConversion 类级别类型装换验证

这个注解的注解是用于类和应用程序的转换规则;
@TypeConversion(rule = ConversionRule.COLLECTION, converter = "java.util.String")
public void setUsers( List users ) {
this.users = users;
}


@Validations

如果想使用多个相同类型的注释,这些注释必须嵌套在@Validations() 注释;
public class TestAction{
private String name;
@Validations(
requiredFields ={@RequiredFieldValidator(type = ValidatorType.SIMPLE,fieldName = "customfield", message = "You must enter a value for field.")},
requiredStrings ={@RequiredStringValidator(type = ValidatorType.SIMPLE, fieldName = "stringisrequired", message = "You must enter a value for string.")}
)
public String getName() {
return name;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: