首先,我是Vaadin7的新手。当我发现BeanFieldGroup.class时,我正在尝试一些vaadin演示。正如我所看到的,这个类将一个字段绑定到一个bean属性。在bean中,使用验证约束注释对属性进行注释(JSR303)。在本例中,我的pom.xml包含hibernate验证器依赖项:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.0.CR1</version>
</dependency>
我创建了validationmessage.properties文件,并在其中放了一些消息(带有匈牙利字符),它以UTF-8格式保存,例如:
validation.NotBlank=Árvíztűrő tükörfúrgép
下面是带注释的bean属性:
@NotNull(message = "{validation.NotBlank}")
private String name = null;
private MessageSource MessageSource(){
ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource = new ReloadableResourceBundleMessageSource();
reloadableResourceBundleMessageSource.setCacheSeconds(5000);
reloadableResourceBundleMessageSource.setFallbackToSystemLocale(false);
reloadableResourceBundleMessageSource.setDefaultEncoding("UTF-8");
Properties properties = new Properties();
properties.setProperty("fileEncodings", "UTF-8");
reloadableResourceBundleMessageSource.setFileEncodings(properties);
reloadableResourceBundleMessageSource.setBasename("classpath:/locales/messages");
return reloadableResourceBundleMessageSource;
}
@Bean
public LocalValidatorFactoryBean validator(){
LocalValidatorFactoryBean factory = new LocalValidatorFactoryBean();
factory.setValidationMessageSource(MessageSource());
return factory;
}
Vaadin的BeanFieldGroup
使用另一个Vaadin类BeanValidator
进行JSR-303验证。如果您在BeanValidator.getJavaxBeanValidator()
和GetJavaxBeanValidatorFactor()
方法中查看它的源代码,您将看到它正在构建自己的Validator
和ValidatorFactor
实例。您需要对它进行子类,并用一个使用从Spring上下文获得的ValidatorFactor
方法重写GetJavaxBeanValidatorFactor()
方法,该上下文被正确设置为使用Spring自己的UTF-8编码的MessageSource
,正如您在示例中所配置的那样。它还将帮助您进行调试,因为Spring的messageSource
可以重新加载,这是一个巨大的保护程序。
编辑:在关于如何使用子类化重写的注释中,我意识到,以Vaadin API这部分的当前状态(从7.5.9版开始),我无法优雅地完成它。由于我们不能优雅地完成它,我们可以通过反射来完成它,将这个hack实现为spring组件:
@Component
public class VaadinValidationHack implements InitializingBean {
@Autowired
private ValidatorFactory validatorFactory;
protected void hack() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
Field field = BeanValidator.class.getDeclaredField("factory");
if (!field.isAccessible()) {
field.setAccessible(true);
}
field.set(null, validatorFactory);
}
@Override
public void afterPropertiesSet() throws Exception {
hack();
}
}
现在,我正在用Spring MVC开发一个web应用程序。 样品值可以是“0.05”、“1.00”、“12.55”等。 因此,如果有任何办法来解决这个问题,请点亮我。谢了。
我需要应用一个双值验证,这需要与圆周率匹配。我正在考虑使用@pattern(regex=“3.14159265359”)。这是使用Hibernate验证约束应用这样一个约束的最佳方式吗?谢谢
我正在用以下组件构建自己的证书链: 根证书是自签名证书,中间证书由根证书和用户由中间证书签名。 现在我想验证一个用户证书是否有其根证书的锚。 具有 验证是可以的。在下一步中,我将使用 验证结果显示 什么是错的?
我正在尝试使用自定义Bean验证来验证应该大于零的数值,但问题是使用如下单个自定义验证器来验证任何数值:整数、浮点数、双......: 整数int; @PositiveNumber双倍双; 这可能吗?
我现在把这两者搞混了。我知道Hibernate Validator6是Bean验证2.0规范的参考实现。它支持分组、错误消息国际化、自定义方法验证等。问题是Spring5支持这些特性还是我只剩下Hibernate Validator6了? 网上所有的参考例子都建议使用Hibernate验证器,没有什么关于Spring验证的发现,请建议或指向其他链接。
我正在使用Spring Boot 2.2.0用java bean验证框架构建一个restful服务。Hibernate-Validator在幕后使用。验证工作得很好,但在一个字段与约束不匹配后会引发异常。我想先验证所有字段,然后给消费者一个包含所有错误的响应。这可能吗?