如何让验证程序在空值上引发错误?我可以通过我的日志看到,当我尝试提交一个空字段时,它正在调用验证器,但它永远不会引发onError,所以我无法处理它。当有人试图提交一个空字段而不必在我的表单的提交中签入时,我想在反馈面板中显示错误消息。
@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消息。如果我只是加载表单并提交它而不输入任何数据,我什么也得不到。
答案 0 :(得分: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"));
然后,如果您的字段为空,则错误消息为:
“用户名”字段不能为空。
答案 1 :(得分:0)
If you just want to validate a field if it is not empty then set the field required:
component.setRequired(true);
Then add a label for you error message
component.setLabel(Model.of("Username"));
Then add a a FeedbackPanel
FeedbackPanel feedback = new FeedbackPanel("feedback");
feedback.setOutputMarkupId(true);
form.add(feedback);
To finish, you have to @Override the onError method in your AjaxSubmitLink :
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);
}
});
Then if your field will be empty the error message will be:
The field 'Username' cannot be empty.