Я использую 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?
Спасибо.
BTW Я использую Tomcat 7, JDK 7. – prule