Struts2入门(7): 注解

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;
   }
}








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值