5

整数値を含む Wicket テキストフィールドがあります

currentValueTextField = new TextField<IntParameter>("valueText", new PropertyModel<IntParameter>(model, "value"));

次のように、これにカスタムバリデータを添付しています

currentValueTextField.add(new IntegerValidator());

バリデータクラスは

class IntegerValidator extends AbstractValidator<IntParameter> {

private static final long serialVersionUID = 5899174401360212883L;

public IntegerValidator() {
}

@Override
public void onValidate(IValidatable<IntParameter> validatable) {
    ValidationError error = new ValidationError();
    if (model.getValue() == null) {
        AttributeAppender redOutline = new AttributeAppender("style", new Model<String>("border-style:solid; border-color:#f86b5c; border-width: 3px"), ";");
        currentValueTextField.add(redOutline);
        currentValueTextField.getParent().getParent().add(redOutline);
        validatable.error(error);
        }
    }
}

ただし、テキストフィールドに何も入力しないと、onValidate()メソッドが呼び出されません。

この場合、null 値を確認するための推奨される方法は何ですか? 入力された値の範囲チェックも行いたいと思います。

4

4 に答える 4

4

ただ電話する

currentValueTextField.setRequired(true);

フィールドを必須としてマークし、Wicket が独自に null 値を処理するようにします。入力フィールドごとに複数のバリデーターを簡単に組み合わせることができます。

赤い境界線の追加やエラー メッセージの表示などの特別なエラー処理onErrorは、フォームのメソッドに実装するかFeedbackBorder、適切なフィールドに s を追加することで実装できます。

于 2012-04-25T14:44:54.840 に答える
3

validateOnNullValue()デフォルトであるそれをオーバーライドしfalseます。

@Override
public boolean validateOnNullValue()
{
     return true;
}

validateOnNullValue()メソッドの説明は次のとおりです。

の場合に値を検証するかどうかを示しますnullnull値が実際にあることを確認したい場合を除いてnull(まれなユースケースです) 、値が である場合、通常は検証をスキップすることが望ましいです。これを拡張し、値が であることを確認したいバリデーターは、nullこのメソッドをオーバーライドして を返す必要があります true

于 2012-04-25T14:44:30.260 に答える
1

isEnabled(Component)これを行うためのより良い (そして再利用可能な)方法は、動作のメソッドをオーバーライドすることです。

public class HomePage extends WebPage {
    private Integer value;
    public HomePage() {
        add(new FeedbackPanel("feedback"));
        add(new Form("form", new CompoundPropertyModel(this))
            .add(new TextField("value")
                .setRequired(true)
                .add(new ErrorDecorationBehavior()))
            .add(new Button("submit") {
                @Override
                public void onSubmit() {
                    info(value.toString());
                }
            }));
    }
}

class ErrorDecorationBehavior extends AttributeAppender {
    public ErrorDecorationBehavior() {
        super("style", true, Model.of("border-style:solid; border-color:#f86b5c; border-width: 3px"), ",");
    }
    @Override
    public boolean isEnabled(Component component) {
        return super.isEnabled(component) && component.hasErrorMessage();
    }
}
于 2012-04-25T18:41:10.353 に答える