gpt4 book ai didi

GWT 和 Hibernate 验证器

转载 作者:行者123 更新时间:2023-12-01 11:53:45 25 4
gpt4 key购买 nike

我在将 Hibernate Validator 与 GWT 2.4 一起使用时遇到问题。模块启动时出现错误:

00:00:05,562 [ERROR] Deferred binding result type 'javax.validation.ValidatorFactory' should not be abstract

java.lang.RuntimeException: Deferred binding failed for 'javax.validation.ValidatorFactory' (did you forget to inherit a required module?) ...

模块配置:

<module rename-to='start'>
...
<inherits name="com.google.gwt.validation.Validation" />
<!-- with this doesn't work too
<inherits name="org.hibernate.validator.HibernateValidator" />
-->
...
</module>

入口点:

public class Start implements EntryPoint {
public void onModuleLoad() {

final ValidatorFactory factory = Validation.byDefaultProvider().configure().buildValidatorFactory();
...
}
}

pom.xml

<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
</dependency>

最佳答案

解决了这个问题!
根据http://code.google.com/p/google-web-toolkit/wiki/BeanValidation我必须实现自定义 MyValidatorFactory 并添加到项目 hibernate-validator sources .jar。

GWT 模块配置:

<!-- hibernate validator -->
<inherits name="org.hibernate.validator.HibernateValidator" />
<replace-with class="net.marioosh.gwt.client.MyValidatorFactory">
<when-type-is class="javax.validation.ValidatorFactory" />
</replace-with>

我的验证器工厂

package net.marioosh.gwt.client;

import javax.validation.Validator;
import net.marioosh.gwt.shared.model.entities.Link;
import com.google.gwt.core.client.GWT;
import com.google.gwt.validation.client.AbstractGwtValidatorFactory;
import com.google.gwt.validation.client.GwtValidation;
import com.google.gwt.validation.client.impl.AbstractGwtValidator;

public class MyValidatorFactory extends AbstractGwtValidatorFactory {

/**
* Only the classes listed in the {@link GwtValidation} annotation can be validated.
* In my example: Link.class can be validated
*/
@GwtValidation(value = { Link.class })
public interface GwtValidator extends Validator {
}

@Override
public AbstractGwtValidator createValidator() {
return GWT.create(GwtValidator.class);
}

}

还需要 Hibernate 验证程序源

<!-- local dependency -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-sources</artifactId>
<version>4.2.0.Final</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/hibernate-validator-4.2.0.Final-sources.jar</systemPath>
</dependency>

使用:

public void onModuleLoad() {
final ValidatorFactory factory = Validation.byDefaultProvider().configure().buildValidatorFactory();
final Validator validator = factory.getValidator();
...

Link l = new Link(....);
Set<ConstraintViolation<Link>> violations = validator.validate(l);

if(!violations.isEmpty()) {
// validation fail
} else {
// validation success
}
...
}

关于GWT 和 Hibernate 验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9015595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com