我提供了兩個annotation和一個interface,功能如下:
- ValidateFieldConfig:若沒設定,預設是驗證整個Action,用此annotation可以只驗證想要驗證的field。
- ValidateGroupConfig:搭配JSR303的group使用。
- ValidateMessageFormatter:當Action有implement此interface時,進行callback,讓Action自己決定error message format。
com.gss.gmo.cao.struts2.interceptor.validation.ValidateFieldConfig
package com.gss.gmo.cao.struts2.interceptor.validation;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
/**
* Used by SpringValidationInterceptor. The intercepter will validate entire
* action if ValidateFieldConfig not presented, or all fields one by one
* configured in ValidateFieldConfig.
*
* @author linus_chien
*
*/
@Documented
@Target(value = METHOD)
@Retention(value = RUNTIME)
public @interface ValidateFieldConfig {
/**
* Field names in action to validate.
*
* @return
*/
String[] fields() default {};
}
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
/**
* Used by SpringValidationInterceptor. The intercepter will validate entire
* action if ValidateFieldConfig not presented, or all fields one by one
* configured in ValidateFieldConfig.
*
* @author linus_chien
*
*/
@Documented
@Target(value = METHOD)
@Retention(value = RUNTIME)
public @interface ValidateFieldConfig {
/**
* Field names in action to validate.
*
* @return
*/
String[] fields() default {};
}
com.gss.gmo.cao.struts2.interceptor.validation.ValidateGroupConfig
package com.gss.gmo.cao.struts2.interceptor.validation;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.validation.groups.Default;
/**
* Applying Bean Validation Groups.
*
* @author linus_chien
*
*/
@Documented
@Target(value = METHOD)
@Retention(value = RUNTIME)
public @interface ValidateGroupConfig {
/**
* @return
*/
Class<?>[] groups() default { Default.class };
}
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.validation.groups.Default;
/**
* Applying Bean Validation Groups.
*
* @author linus_chien
*
*/
@Documented
@Target(value = METHOD)
@Retention(value = RUNTIME)
public @interface ValidateGroupConfig {
/**
* @return
*/
Class<?>[] groups() default { Default.class };
}
com.gss.gmo.cao.struts2.interceptor.validation.ValidateMessageFormatter
package com.gss.gmo.cao.struts2.interceptor.validation;
public interface ValidateMessageFormatter {
String format(String fieldName, String errorMessage);
}
public interface ValidateMessageFormatter {
String format(String fieldName, String errorMessage);
}