1

如何让我的验证器在空值上引发错误?我可以通过我的日志看到,当我尝试提交一个空字段时,它正在调用验证器,但它永远不会引发 onError,所以我无法处理这个问题。我想在有人尝试提交空字段而不是检查我的表单的 onSubmit 时在反馈面板中显示错误消息。

@Override
protected void onValidate(IValidatable<String> validatable) {

    String value = validatable.getValue();

    if (value == null) {
        ValidationError error = new ValidationError();
        error.addMessageKey("messageKey");
        validatable.error(error);
    }

}

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

编辑

component.setRequired如果上述方法不容易实现,有没有一种方法可以让我在反馈面板为真并且表单提交时使用空白字段时轻松注册错误消息?我只是不希望在用户尝试提交带有空字段的表单时没有反馈给用户,但我也不希望在 onSubmit 处理程序中对此有逻辑。

编辑 2更多上下文

以下是我要验证的两个字段:

final TextField<String> currentLpnField = new TextField<String>("currentLpn", Model.of(""));
currentLpnField.setOutputMarkupId(true);
currentLpnField.setRequired(true);
currentLpnField.add(new BarcodeLPNValidator());

final TextField<String> upcField = new TextField<String>( "upc", new Model<String>() ); 
upcField.setOutputMarkupId(true);
upcField.setRequired(true);
upcField.add(new BarcodeUPCValidator());

这是我的属性文件中的内容:

upc.null=UPC cannot be null
upc.Required=UPC is required

currentLpn.null=LPN cannot be null
currentLpn.Required=LPN is required

只有在我在字段中输入信息、验证它、然后删除它并再次尝试验证后,我才会收到 *.Required 消息。如果我只是加载表单并提交它而不输入任何数据,我什么也得不到。

4

2 回答 2

3

如果您只想验证一个字段是否为空,请设置该字段:

component.setRequired(Boolean.TRUE);

然后,如果您想向用户提供反馈,则必须使用FeedbackPanel. 将 feedbackPanel 配置为在有任何消息时可见:

private FeedbackPanel feedbackPanel;
feedbackPanel  = new FeedbackPanel("feedbackPanel") {
    @Override
    protected void onConfigure() {
        super.onConfigure(); 
        setVisible(anyMessage());
    }
};
feedbackPanel.setOutputMarkupPlaceholderTag(true);

然后,如果您使用 AJAX 提交表单,则必须将 feedbackPanel 添加到AjaxRequestTarget它将重新渲染,如果有任何(错误)消息,feedbackPanel 将显示消息:

AjaxButton btn = new AjaxButton("button") {
    @Override
    protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
        super.onSubmit(target, form); 
        target.add(feedbackPanel);
    }
};

此外,要获得良好的错误消息,请为您的组件设置标签:

component.setLabel(Model.of("Username"));

然后,如果您的字段为空,则错误消息将是:

“用户名”字段不能为空。

于 2013-08-17T07:30:44.163 回答
0

如果您只想验证一个字段是否为空,请设置该字段:

component.setRequired(true);

然后为您的错误消息添加标签

component.setLabel(Model.of("Username"));

然后添加一个反馈面板

FeedbackPanel feedback = new FeedbackPanel("feedback");
feedback.setOutputMarkupId(true);
form.add(feedback);

要完成,您必须在 AjaxSubmitLink 中 @Override onError 方法:

add(new AjaxSubmitLink("save", form) {
    private static final long serialVersionUID = 1L;
    @Override
    protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
        super.onSubmit(target, form);

    }

    @Override
    protected void onError(AjaxRequestTarget target, Form<?> form) {
        super.onError(target, form);
        target.add(feedback);
    }
});

然后,如果您的字段为空,则错误消息将是:

“用户名”字段不能为空。

于 2017-06-15T10:00:00.613 回答