Java 8 瓦丁8日场
如何隐藏Vaadin 8中datefield的即时验证。我有以下代码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 (
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");
}
}
};