2013年1月15日 星期二

Integrate Bean Validation (JSR303) with Struts2 -- Annotation & ValidateMessageFormatter

Integrate Bean Validation (JSR303) with Struts2 -- Outline
我提供了兩個annotation和一個interface,功能如下:
  1. ValidateFieldConfig:若沒設定,預設是驗證整個Action,用此annotation可以只驗證想要驗證的field。
  2. ValidateGroupConfig:搭配JSR303的group使用。
  3. 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 {};

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

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

}