【发布时间】:2015-01-15 18:47:15
【问题描述】:
我在运送 Hibernate-validator 5.1 的 WildFly 8.1 应用服务器上有一个 JSF-2.2 Web 应用
我想使用 fluent API 以编程方式设置一些约束,因为它们取决于具体情况,例如 @Size 约束的最小值和最大值可能会有所不同,或者字段可能是 @NotNull 或不是...
所以我尝试以编程方式配置约束,例如在此处描述:http://docs.jboss.org/hibernate/validator/5.0/reference/en-US/html_single/#section-programmatic-api
我做了类似的事情来尝试(在 EJB @Singleton @Startup 中):
HibernateValidatorConfiguration configuration = Validation
.byProvider( HibernateValidator.class )
.configure();
ConstraintMapping constraintMapping = configuration.createConstraintMapping();
constraintMapping
.type( Car.class )
.property( "manufacturer", FIELD )
.constraint( new NotNullDef() )
.property( "licensePlate", FIELD )
.ignoreAnnotations()
.constraint( new NotNullDef() )
.constraint( new SizeDef().min( 2 ).max( 14 ) );
Validator validator = configuration.addMapping( constraintMapping )
.buildValidatorFactory()
.getValidator();
但是 JSF 不使用这个新的约束映射。
即使我打破了以编程方式设置的约束,我也可以毫无问题地提交表单
我不知道如何配置 JSF 正在使用的 Validator 或 ValidatorFactory 或如何向 JSF 提供其他 Validator 或 ValidatorFactory...
或者可能是更多关于配置WildFly服务器,在配置文件或JNDI中做的事情,我没有线索......
编辑
我尝试在 JNDI 中绑定新的验证器和验证器工厂 但我不能,因为“命名上下文是只读的”
Hashtable jndiProperties = new Hashtable();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
Context context = new InitialContext(jndiProperties);
context.bind("java:comp/Validator", factory.getValidator());
context.bind("java:comp/ValidatorFactory", factory);
谢谢哈迪
正如你所提议的,我发布了 Hibenate Validator 改进 https://hibernate.atlassian.net/browse/HV-955
【问题讨论】:
标签: jsf jsf-2 wildfly hibernate-validator wildfly-8