Java 如何检查Wicket文本字段中的空值?
我有一个Wicket Textfield,其中包含一个整数值Java 如何检查Wicket文本字段中的空值?,java,wicket,Java,Wicket,我有一个Wicket Textfield,其中包含一个整数值 currentValueTextField = new TextField<IntParameter>("valueText", new PropertyModel<IntParameter>(model, "value")); 验证程序类是 class IntegerValidator extends AbstractValidator<IntParameter> { private stat
currentValueTextField = new TextField<IntParameter>("valueText", new PropertyModel<IntParameter>(model, "value"));
验证程序类是
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);
}
}
}
类IntegerValidator扩展了AbstractValidator{
私有静态最终长serialVersionUID=5899174401360212883L;
公共集成验证器(){
}
@凌驾
public void onValidate(IValidatable validatable){
ValidationError error=新的ValidationError();
if(model.getValue()==null){
AttributeAppender redOutline=新的AttributeAppender(“样式”,新模型(“边框样式:纯色;边框颜色:#f86b5c;边框宽度:3px”),“;”;
currentValueTextField.add(redOutline);
currentValueTextField.getParent().getParent().add(redOutline);
可验证。错误(error);
}
}
}
但是,如果我在文本字段中不键入任何内容,则不会调用我的onValidate()
方法
在这种情况下,检查空值的推荐方法是什么?
我还想对输入的值进行范围检查。覆盖
validateOnNullValue()
,默认情况下为false
@Override
public boolean validateOnNullValue()
{
return true;
}
以下是validateOnNullValue()
方法的说明:
指示是否验证值(如果值为null
)。如果值为null
,通常需要跳过验证,除非我们希望确保
该值实际上是null
(一个罕见的用例)。扩展此和
要确保值为null
应覆盖此方法并返回
true
就打电话
currentValueTextField.setRequired(true);
将字段标记为所需,并让Wicket自己处理空值。每个输入字段可以轻松组合多个验证器
任何特殊的错误处理,如添加红色边框或显示错误消息,都可以在表单的onError
方法中实现,或者通过将feedbackorder
s添加到适当的字段中来实现。更好(且可重复使用)的方法是重写行为的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();
}
}
现在您需要自定义错误消息。所以子类FeedbackPanel
您可以在以下内容中找到更多信息
将此类添加到表单或组件中我不知道Wicket的情况,但我知道在其他web框架中,空文本字段不会调用验证。有些为其标记提供附加标志,以启用/禁用所需的检查,而有些则可能在将表单值放入模型时必须执行检查(或随后检查模型)。重写validateOnNullValue()会导致调用我的验证器,但有趣的是,我的模型中的值没有设置为null。因此,我的验证程序代码不会引发错误,因为它认为textfield具有非空值。嗯。。。但是
null
必须在这里validable.getValue()
,当您通过抛出验证器时,该值仍然没有在模型上设置。请注意,现在您希望在大多数情况下直接使用IValidator,Wicket 6中的InulLaccessingValidator。这里的问题是我无法控制如何指示错误。我想在文本字段中添加一个红色边框,但wicket会在反馈面板中显示一条错误消息。我不想使用反馈面板。@AndrewFielden可以通过为表单实现onError()来存档此面板。我扩展了我的答案来涵盖这一点。谢谢。写维克特的人什么都想好了。
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();
}
}
currentValueTextField.setRequired(true);