【问题标题】:Spring + JSF2 + JSR 303 bean validationSpring + JSF2 + JSR 303 bean 验证
【发布时间】:2013-11-23 03:23:16
【问题描述】:

我正在使用 Spring 3.2.2 和 Primefaces 4.0 和 Hibernate 4.2。我的实体上有 JSR 303 验证注释,并且我已经配置了 spring 以在服务层验证它们 - 这很好。

但我希望在调用服务之前启动 JSF 验证,但它没有。我所做的所有研究都表明我只需向类路径添加一个验证器,JSF2 就会自动应用。

我已将建议的 jar 添加到我的类路径中:

[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

完整的依赖树可以在https://gist.github.com/prule/7411171看到

我的验证对象和托管 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 页面:

<!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 配置包含:

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

我找到的所有问题和答案都是基本的 JSF2(没有 spring)或基于 spring-web。我的 spring/jsf 集成是否丢失或不正确?

谢谢。

【问题讨论】:

  • 顺便说一句,我使用的是 Tomcat 7,JDK 7。

标签: java spring primefaces bean-validation jsf-2.2


【解决方案1】:

AFAIK,Spring 与 JEE7/JSF2.2 Bean 验证(尚)不兼容。要么等待兼容集,要么使用与 JEE7 兼容的 DI 框架,如 GF4 默认附带的 JBoss WELD。

【讨论】:

猜你喜欢
  • 2011-07-24
  • 2015-01-10
  • 2012-02-08
  • 1970-01-01
  • 2012-06-17
  • 2018-08-15
  • 2011-10-29
  • 2014-03-24
  • 2011-01-31
相关资源
最近更新 更多