1

テキストフィールドでは、ユーザーが入力した文字数を確認できます。次に例を示します。

Field field;
field.addValidator(
    new StringLengthValidator(
        "WARNING MESSAGE HERE", 6, 20, false));

番号が範囲内にない場合は、警告メッセージがスローされます。数値フィールドの場合、タイプを確認できます。

field.addValidator(new Validator() {

   public boolean isValid(Object value) {
      try {
        float f = Float.parseFloat((String) value);
        return true;
      } catch (Exception e) {
         field.getWindow().showNotification("WARNING MESSAGE HERE");
         field.setValue(0);                            
         return false;
      }
   }

   public void validate(Object value)
      throws InvalidValueException {
   }

});

コンボボックスには、次のように指定します。

final ComboBox combobox = new ComboBox("...");

if("someProperty".equals(propertyId)) {
   field = combobox;
}

field.setRequired(true);                
field.setRequiredError("WARNING MESSAGE HERE");                

空白のままにすると、警告は表示されず、フォームがサーバーに送信されます。ComboBoxにはどのバリデーターが必要ですか?

情報をいただければ幸いです。ありがとうございます。

4

2 に答える 2

1

あなたが探しているのは、ユーザーが何かを変更した後のサーバーへの即時のコールバックです。

// Fire value changes immediately when the field loses focus
combobox.setImmediate(true);

そのため、ユーザーは、サーバーと対話するために必要なことをコミットするか、他のことを行うまで、検証を取得するのを待つ必要はありません。

于 2012-10-31T09:09:45.687 に答える
0

明示的にvalidate()メソッドを呼び出す必要があると思います。

/**
 * Checks the validity of the Validatable by validating the field with all
 * attached validators except when the field is empty. An empty field is
 * invalid if it is required and valid otherwise.
 * 
 * The "required" validation is a built-in validation feature. If the field
 * is required, but empty, validation will throw an EmptyValueException with
 * the error message set with setRequiredError().
 * 
 * @see com.vaadin.data.Validatable#validate()
 */
public void validate() throws Validator.InvalidValueException {

    if (isEmpty()) {
        if (isRequired()) {
            throw new Validator.EmptyValueException(requiredError);
        } else {
            return;
        }
    }

    // If there is no validator, there can not be any errors
    if (validators == null) {
        return;
    }
...

デフォルトでは、フォームは検証を実行します。

/**
 * Checks the validity of the validatable.
 * 
 * @see com.vaadin.data.Validatable#validate()
 */
@Override
public void validate() throws InvalidValueException {
    super.validate();
    for (final Iterator<Object> i = propertyIds.iterator(); i.hasNext();) {
        (fields.get(i.next())).validate();
    }
}
于 2012-10-30T18:18:31.303 に答える