2013-11-11 5 views
0

Я использую Spring 3.2.2 с Primefaces 4.0 и Hibernate 4.2. У меня есть аннотации проверки JSR 303 для моих сущностей, и у меня есть пружина, настроенная для проверки их на уровне сервиса - это очень хорошо работает.Spring + JSF2 + JSR 303 проверка бобов

Но я бы хотел, чтобы проверка JSF выполнялась до вызова службы, но это не так. Все проведенные исследования говорят, что мне просто нужно добавить валидатор в путь к классам, и JSF2 будет автоматически применяться.

Я добавил предлагаемые банки к моим: классам

[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

Моих проверенных объектов и управляемый компонент:

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/jsf?

Спасибо.

+0

BTW Я использую Tomcat 7, JDK 7. – prule

ответ

0

AFAIK, Spring не совместим (еще) с JEE7/JSF2.2 Проверка фасоли. Либо дождаться совместимого набора, либо использовать JEE7-совместимую инфраструктуру DI, такую ​​как JBoss WELD, которая поставляется по умолчанию с GF4.

+0

Хе-хе, я думал, что будет такой ответ. Благодарю. – prule

+0

Вот она ... Bean valudation 1,1 должна поддерживаться с весны 4 "Поддержка ключевых Java EE 7 технологий: включая JMS 2.0, JPA 2.1,' Bean Validation 1.1', Servlet 3.1, и JCache" –

+0

весна 3.2 поддерживает JSR303, хотя, но это просто не поддерживается при использовании с JSF? http://docs.spring.io/spring/docs/3.2.5.RELEASE/spring-framework-reference/htmlsingle/#validation-beanvalidation-overview – prule

Смежные вопросы