简体   繁体   English

Spring + JSF2 + JSR 303 Bean验证

[英]Spring + JSF2 + JSR 303 bean validation

I'm using Spring 3.2.2 with Primefaces 4.0 and Hibernate 4.2. 我正在将Spring 3.2.2与Primefaces 4.0和Hibernate 4.2一起使用。 I have JSR 303 validation annotations on my entities, and I have spring configured to validate them at the service layer - that much works fine. 我在实体上具有JSR 303验证批注,并且已将spring配置为在服务层验证它们-很好用。

But I'd like JSF validation to kick in before calling the service but it doesn't. 但是我希望在调用服务之前启动JSF验证,但事实并非如此。 All the research I've done says I just have to add a validator to the classpath and JSF2 will automatically apply. 我所做的所有研究都表明,我只需要向类路径添加一个验证器,JSF2将自动应用。

I've added the suggested jars to my classpath: 我已经将建议的罐子添加到我的类路径中:

[INFO] |     +- com.sun.faces:jsf-api:jar:2.2.4:compile
[INFO] |     +- com.sun.faces:jsf-impl:jar:2.2.4:compile
[INFO] |     +- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO] |     +- org.hibernate:hibernate-validator:jar:4.3.1.Final:compile
[INFO] |     +- org.primefaces.extensions:primefaces-extensions:jar:1.0.0:compile
[INFO] |     |  +- org.primefaces:primefaces:jar:4.0:compile
[INFO] |     +- org.slf4j:slf4j-api:jar:1.7.5:compile
[INFO] |     +- org.slf4j:slf4j-log4j12:jar:1.7.5:compile
[INFO] |     |  \- log4j:log4j:jar:1.2.17:compile
[INFO] |     \- org.jboss.logging:jboss-logging:jar:3.1.3.GA:compile

Full dependency tree can be seen at https://gist.github.com/prule/7411171 完整的依赖树可以在https://gist.github.com/prule/7411171上看到

My validated object and managed bean: 我的验证对象和托管bean:

public class ValidatedObject {
    @NotEmpty
    String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

@ManagedBean
@RequestScoped
public class ValidatedController {
    private ValidatedObject object = new ValidatedObject();

    public ValidatedObject getObject() {
        return object;
    }


    public void onSave() {
        System.out.println("saving");
    }
}

Facelets page: 构面页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">

<f:view contentType="text/html">

    <h:body>
        <h:form >
            <p:messages />
            <p:outputLabel for="name" value="Name"/>
            <p:inputText id="name" value="#{validatedController.object.name}"/>
            <p:commandButton value="Save" action="#{validatedController.onSave}" ajax="false"/>
        </h:form>
    </h:body>

</f:view>
</html>

Spring config contains: Spring配置包含:

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor">
    <property name="validator" ref="validator"/>
</bean>

All the questions and answers I've found are basic JSF2 (without spring) or spring-web based. 我发现的所有问题和答案都是基本的JSF2(无spring)或基于spring-web的。 Have I got something missing or incorrect with my spring/jsf integration? 我的spring / jsf集成是否缺少或不正确?

Thanks. 谢谢。

AFAIK, Spring is not compatible (yet) with JEE7/JSF2.2 Bean validation. AFAIK,Spring与JEE7 / JSF2.2 Bean验证尚不兼容。 Either wait for a compatible set or use a JEE7 compatible DI framework like JBoss WELD that is shipped by default with GF4. 等待兼容集,或者使用GF4默认随附的JEE7兼容DI框架(例如JBoss WELD)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM