View Javadoc

1   package org.seasar.cubby.validator.validators;
2   
3   import org.seasar.cubby.validator.BaseValidator;
4   import org.seasar.cubby.validator.ValidationContext;
5   import org.seasar.framework.util.StringUtil;
6   
7   /**
8    * 最大文字数を検証します。<p>
9    * String#length()メソッドで文字列の長さを求めます。文字列のバイト数でないこと、半角全角も1文字としてカウントされることに注意してください。
10   * @author agata
11   * @see String#length()
12   */
13  public class MaxLengthValidator extends BaseValidator {
14  
15  	/**
16  	 * 最大文字数
17  	 */
18  	private final int max;
19  
20  	/**
21  	 * コンストラクタ
22  	 * @param max 最大文字数
23  	 */
24  	public MaxLengthValidator(final int max) {
25  		this(max, "valid.maxLength");
26  	}
27  
28  	/**
29  	 * エラーメッセージキーを指定するコンストラクタ
30  	 * @param max 最大文字数
31  	 * @param messageKey エラーメッセージキー
32  	 */
33  	public MaxLengthValidator(final int max, final String messageKey) {
34  		this.max = max;
35  		this.setMessageKey(messageKey);
36  	}
37  
38  	public String validate(final ValidationContext ctx) {
39  		final Object value = ctx.getValue();
40  		if (value instanceof String) {
41  			String str = (String) value;
42  			if (StringUtil.isEmpty((String) value)) {
43  				return null;
44  			}
45  			if (str.length() <= max) {
46  				return null;
47  			}
48  		} else if (value == null) {
49  			return null;
50  		}
51  		return getMessage(getPropertyMessage(ctx.getName()), max);
52  	}
53  }