Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8 瓦丁8日场_Java 8_Vaadin8 - Fatal编程技术网

Java 8 瓦丁8日场

Java 8 瓦丁8日场,java-8,vaadin8,Java 8,Vaadin8,如何隐藏Vaadin 8中datefield的即时验证。我有以下代码 dateField.setLocale(new Locale("fr", "CA")); binder.forField(dateField).withValidator(new Validator<LocalDate>() { @Override public ValidationResult apply(LocalDate value, ValueContext context) { if (

如何隐藏Vaadin 8中datefield的即时验证。我有以下代码

dateField.setLocale(new Locale("fr", "CA"));

binder.forField(dateField).withValidator(new Validator<LocalDate>() {
  @Override
  public ValidationResult apply(LocalDate value, ValueContext context) {
    if (LocalDate.now().equals(value)) {
      return ValidationResult.ok();
    } else {
      return ValidationResult.error("the date is not the current date");
    }
  }
}).withValidationStatusHandler(new BindingValidationStatusHandler() {
  @Override
  public void statusChange(BindingValidationStatus<?> statusChange) {
    if (statusChange.getResult().isPresent()) {
      ValidationResult validationResult = statusChange.getResult().get();
      if (validationResult.isError()) {
        label.setCaption("the date is not the current date");
      } else {
        label.setCaption("the date IS the current date");
      }
    }
  }
}).bind(CustomDate::getLocalDate, CustomDate::setLocalDate);
dateField.setLocale(新语言环境(“fr”、“CA”));
binder.forField(dateField).withValidator(newvalidator()){
@凌驾
公共验证结果应用(LocalDate值、ValueContext上下文){
if(LocalDate.now().equals(value)){
返回ValidationResult.ok();
}否则{
返回ValidationResult.error(“日期不是当前日期”);
}
}
}).withValidationStatusHandler(新的BindingValidationStatusHandler(){
@凌驾
公共无效状态更改(BindingValidationStatus状态更改){
if(statusChange.getResult().isPresent()){
ValidationResult ValidationResult=statusChange.getResult().get();
if(validationResult.isError()){
label.setCaption(“日期不是当前日期”);
}否则{
label.setCaption(“日期为当前日期”);
}
}
}
}).bind(CustomDate::getLocalDate,CustomDate::setLocalDate);
但是,其结果是vaadin默认验证(例如,当输入的dateformat不是预期的格式时)将被执行和我的验证。我想在我的验证器中熟练地验证格式。如何做到这一点


可能使用
setComponentError
适用于您的用例。它应该提供一种覆盖默认错误消息的方法


例如,请参阅。

我没有尝试过它,但您可以检查它是否按照文档()中的说明工作:

DateField date=new DateField(“我的日期”){
@凌驾
受保护的结果HandleUnPassableDateString(
字符串(日期字符串){
试一试{
//尝试使用其他格式进行分析
LocalDate parsedAtServer=LocalDate.parse(日期字符串,DateTimeFormatter.ISO_日期);
返回Result.ok(parsedAtServer);
}捕获(DateTimeParse异常){
返回结果。错误(“错误日期”);
}
}
};

根据文档,客户端验证可以通过CSS隐藏。

与您的问题无关,但我建议使用Java 8 lambdas而不是匿名类来提高可读性。
DateField date = new DateField("My Date") {
    @Override
    protected Result<LocalDate> handleUnparsableDateString(
          String dateString) {
        try {
            // try to parse with alternative format
            LocalDate parsedAtServer = LocalDate.parse(dateString, DateTimeFormatter.ISO_DATE);
            return Result.ok(parsedAtServer);
        } catch (DateTimeParseException e) {
           return Result.error("Bad date");
        }
    }
};