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()则不会调用我的方法。

在这种情况下,检查空值的推荐方法是什么?我还想对输入的值进行范围检查。

4

4 回答 4

4

打电话

currentValueTextField.setRequired(true);

将字段标记为必填,并让 Wicket 自行处理空值。您可以轻松地为每个输入字段组合多个验证器。

任何特殊的错误处理,例如添加红色边框或显示错误消息,都可以在表单的方法中实现,或者通过在适当的字段中onError添加s 来实现。FeedbackBorder

于 2012-04-25T14:44:54.840 回答
3

默认情况下覆盖validateOnNullValue()false

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

这是validateOnNullValue()方法的描述:

指示是否验证该值(如果是)null。如果值是 ,通常希望跳过验证null,除非我们想确保该值是真实的null(一个罕见的用例)。扩展此方法并希望确保值为 is 的验证器null应覆盖此方法并返回 true

于 2012-04-25T14:44:30.260 回答
2
currentValueTextField.setRequired(true);

现在您需要自定义错误消息。所以继承FeedbackPanel。

您可以在以下链接中找到更多信息

将此类添加到您的表单或组件中

于 2013-04-26T08:44:46.103 回答
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 回答