我有一个包含整数值的Wicket Textfield
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()
方法。
在这种情况下,检查空值的推荐方法是什么? 我还想对输入的值进行范围检查。
答案 0 :(得分:4)
只需致电
currentValueTextField.setRequired(true);
根据需要标记字段,并让Wicket自己处理空值。您可以轻松地为每个输入字段组合多个验证器。
任何特殊的错误处理,例如添加红色边框或显示错误消息,都可以在表单的onError
方法中实现,也可以将FeedbackBorder
添加到相应的字段中。
答案 1 :(得分:3)
默认情况下覆盖validateOnNullValue()
false
。
@Override
public boolean validateOnNullValue()
{
return true;
}
这是validateOnNullValue()
方法的描述:
指示是否验证值
null
。除非我们想确定,否则通常需要跳过验证,如果值为null
该值实际上是null
(一种罕见的用例)。扩展此和的验证器 希望确保值null
应覆盖此方法并返回true
。
答案 2 :(得分:2)
currentValueTextField.setRequired(true);
现在您需要自定义错误消息。所以子类是FeedbackPanel。
您可以在以下link
中找到更多信息将此类添加到表单或组件
答案 3 :(得分: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();
}
}