Struts 2 應(yīng)用程序可以使用 Java 5 注解作為 XML 和 Java 屬性配置的一個(gè)替代。這里是和不同類(lèi)別相關(guān)的最重要的注解列表:
@Namespace 注解允許在 Action 類(lèi)中允許定義一個(gè)動(dòng)作的 namespace,而不是基于 Zero 配置的約定。
@Namespace("/content")
public class Employee extends ActionSupport{
...
}
@Result 注解允許在 Action 類(lèi)中定義動(dòng)作結(jié)果,而不是在一個(gè) XML 文件中。
@Result(name="success", value="/success.jsp")
public class Employee extends ActionSupport{
...
}
@Results 注解為一個(gè) Action 定義了一組結(jié)果。
@Results({
@Result(name="success", value="/success.jsp"),
@Result(name="error", value="/error.jsp")
})
public class Employee extends ActionSupport{
...
}
@After 注解標(biāo)記一個(gè)在主動(dòng)作方法之后需要調(diào)用的動(dòng)作方法,并且結(jié)果被執(zhí)行。返回值將被忽略。
public class Employee extends ActionSupport{
@After
public void isValid() throws ValidationException {
// validate model object, throw exception if failed
}
public String execute() {
// perform secure action
return SUCCESS;
}
}
@Before 注解標(biāo)記一個(gè)在主動(dòng)作方法之前需要調(diào)用的動(dòng)作方法,并且結(jié)果被執(zhí)行。返回值將被忽略。
public class Employee extends ActionSupport{
@Before
public void isAuthorized() throws AuthenticationException {
// authorize request, throw exception if failed
}
public String execute() {
// perform secure action
return SUCCESS;
}
}
@BeforeResult 注解標(biāo)記一個(gè)在結(jié)果之前需要執(zhí)行的動(dòng)作方法。返回值將被忽略。
public class Employee extends ActionSupport{
@BeforeResult
public void isValid() throws ValidationException {
// validate model object, throw exception if failed
}
public String execute() {
// perform action
return SUCCESS;
}
}
這個(gè)驗(yàn)證注解檢查一個(gè)字段是否有任何轉(zhuǎn)換錯(cuò)誤,如果轉(zhuǎn)換錯(cuò)誤存在,則應(yīng)用它們。
public class Employee extends ActionSupport{
@ConversionErrorFieldValidator(message = "Default message",
key = "i18n.key", shortCircuit = true)
public String getName() {
return name;
}
}
這個(gè)驗(yàn)證注解檢查一個(gè)日期字段有一個(gè)值在指定的范圍內(nèi)。
public class Employee extends ActionSupport{
@DateRangeFieldValidator(message = "Default message",
key = "i18n.key", shortCircuit = true,
min = "2005/01/01", max = "2005/12/31")
public String getDOB() {
return dob;
}
}
這個(gè)驗(yàn)證注解檢查一個(gè) double 字段有一個(gè)值在指定的范圍內(nèi)。如果設(shè)置的既不是最小的也不是最大的,那么什么都不要做。
public class Employee extends ActionSupport{
@DoubleRangeFieldValidator(message = "Default message",
key = "i18n.key", shortCircuit = true,
minInclusive = "0.123", maxInclusive = "99.987")
public String getIncome() {
return income;
}
}
這個(gè)驗(yàn)證注解檢查一個(gè)字段是一個(gè)有效的 e-mail 地址,如果它包含一個(gè)非空的字符串。
public class Employee extends ActionSupport{
@EmailValidator(message = "Default message",
key = "i18n.key", shortCircuit = true)
public String getEmail() {
return email;
}
}
這個(gè)非字段級(jí)驗(yàn)證器驗(yàn)證一個(gè)提供的正則表達(dá)式。
@ExpressionValidator(message = "Default message", key = "i18n.key",
shortCircuit = true, expression = "an OGNL expression" )
這個(gè)驗(yàn)證注解檢查一個(gè)數(shù)字字段有一個(gè)值在指定的范圍內(nèi)。如果設(shè)置的既不是最小的也不是最大的,那么什么都不要做。
public class Employee extends ActionSupport{
@IntRangeFieldValidator(message = "Default message",
key = "i18n.key", shortCircuit = true,
min = "0", max = "42")
public String getAge() {
return age;
}
}
這個(gè)注解使用一個(gè)正則表達(dá)式來(lái)驗(yàn)證一個(gè)字符串字段。
@RegexFieldValidator( key = "regex.field", expression = "yourregexp")
這個(gè)驗(yàn)證注解檢查一個(gè)字段是非空的。這個(gè)注解必須應(yīng)用在方法層。
public class Employee extends ActionSupport{
@RequiredFieldValidator(message = "Default message",
key = "i18n.key", shortCircuit = true)
public String getAge() {
return age;
}
}
這個(gè)驗(yàn)證注解檢查一個(gè)字符串字段不是空的(即非空,長(zhǎng)度 > 0)。
public class Employee extends ActionSupport{
@RequiredStringValidator(message = "Default message",
key = "i18n.key", shortCircuit = true, trim = true)
public String getName() {
return name;
}
}
這個(gè)驗(yàn)證器檢查一個(gè)字符串字段是正確的長(zhǎng)度。假定該字段是一個(gè)字符串。如果設(shè)置的既不是最小長(zhǎng)度也不是最大長(zhǎng)度,那么什么都不要做。
public class Employee extends ActionSupport{
@StringLengthFieldValidator(message = "Default message",
key = "i18n.key", shortCircuit = true,
trim = true, minLength = "5", maxLength = "12")
public String getName() {
return name;
}
}
這個(gè)驗(yàn)證器檢查一個(gè)字段是一個(gè)有效的 URL。
public class Employee extends ActionSupport{
@UrlValidator(message = "Default message",
key = "i18n.key", shortCircuit = true)
public String getURL() {
return url;
}
}
如果你想使用多個(gè)相同類(lèi)型的注解,這些注解必須在 @Validations() 注解中嵌套。
public class Employee extends ActionSupport{
@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;
}
}
這個(gè)注解可以用于自定義驗(yàn)證器。使用 ValidationParameter 注解來(lái)提供額外的參數(shù)。
@CustomValidator(type ="customValidatorName", fieldName = "myField")
在類(lèi)型層中,這是類(lèi)型轉(zhuǎn)換的一個(gè)標(biāo)記注解。Conversion 注解必須應(yīng)用在類(lèi)型層。
@Conversion()
public class ConversionAction implements Action {
}
這個(gè)注解為類(lèi)型轉(zhuǎn)換設(shè)置為 CreateIfNull。CreateIfNull 注解必須應(yīng)用在字段或方法層。
@CreateIfNull( value = true )
private List<User> users;
這個(gè)注解為類(lèi)型轉(zhuǎn)換設(shè)置為 Element。Element 注解必須應(yīng)用在字段或方法層。
@Element( value = com.acme.User )
private List<User> userList;
這個(gè)注解為類(lèi)型轉(zhuǎn)換設(shè)置為 Key。Key 注解必須應(yīng)用在字段或方法層。
@Key( value = java.lang.Long.class )
private Map<Long, User> userMap;
這個(gè)注解為類(lèi)型轉(zhuǎn)換設(shè)置為 KeyProperty。KeyProperty 注解必須應(yīng)用在字段或方法層。
@KeyProperty( value = "userName" )
protected List<User> users = null;
這個(gè)注解的注解用于類(lèi)和應(yīng)用程序范圍的轉(zhuǎn)換規(guī)則。TypeConversion 注解必須應(yīng)用在屬性或方法層。
@TypeConversion(rule = ConversionRule.COLLECTION,
converter = "java.util.String")
public void setUsers( List users ) {
this.users = users;
}