Hi,
ich beschäftige mich gerade mit den beiden genannten Themen und bin auf ein Problem gestoßen:
Ich habe mir einen Flow gebaut, welcher auf der ersten Seite ein Formular darstellt. Die eingegebenen Daten werden vom binder in eine entsprechende Bean kopiert. Anschließend wird beim Übergang zur nächsten Seite ein Service aufgerufen, der die Bean übergeben bekommt und verarbeiten soll. Das funktioniert auch soweit alles super. Jetzt wollte ich die Daten, die der Benutzer auf der ersten Seite eingibt, mittels Java Bean Validation validieren. Also habe ich in meine MVC Konfiguration die "org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" hinzugefuegt. Hier der Code der entsprechenden Spring Konfigurations Datei:
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc]Index of /schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<mvc:annotation-driven conversion-service="conversionService" validator="validator"/>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
<!-- Enables POJO @Controller (like CartController) -->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="order" value="0" />
</bean>
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
<property name="order" value="-1" />
<property name="flowRegistry" ref="flowRegistry" />
</bean>
<!-- Dispatches requests mapped to flows to FlowHandler implementations -->
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
<property name="flowExecutor" ref="flowExecutor" />
</bean>
<!-- Enables annotated methods on POJO @Controller (like CartController) -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<!-- Enables plain controller (e.g. FlowController) -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<!-- Maps a logical view name to a physical resource -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
[/XML]
Auf meiner Bean-Klasse habe ich anschließend eine Property mit @Size(max = 16, min = 16) annotiert und im Service die @Valid Annotation auf den Parameter gesetzt. Leider funktioniert dies nicht. Denn obwohl ich die Property nur mit 4 Zeichen gefüllt habe, bekomme ich keinerlei Fehlermeldung o. ä.
In der Spring Doku ist als Beispiel "leider" nur ein Controller erwähnt, dessen Parameter mittels @Valid geprüft wird (siehe Seite 161 der Spring Webflow Referenzdokumentation). Daher kam bei mir die Idee auf, anstatt eines Services zwischen den beiden Schritten einen Controller reinzuhängen. Leider war dies auch nicht von Erfolg gekrönt, da der Controller solange ignoriert wird, wie das FlowHandlerMapping aktiv ist. Leider habe ich auch noch nicht herausgefunden, wie ich zur Not programmatisch den Flow am Ende des Controllers starten kann, so dass ich auf das FlowHandlerMapping verzichten kann.
Kann mir irgendwer helfen?
Vielen Dank für jeden Hinweis!!
Grüße,
Andreas
ich beschäftige mich gerade mit den beiden genannten Themen und bin auf ein Problem gestoßen:
Ich habe mir einen Flow gebaut, welcher auf der ersten Seite ein Formular darstellt. Die eingegebenen Daten werden vom binder in eine entsprechende Bean kopiert. Anschließend wird beim Übergang zur nächsten Seite ein Service aufgerufen, der die Bean übergeben bekommt und verarbeiten soll. Das funktioniert auch soweit alles super. Jetzt wollte ich die Daten, die der Benutzer auf der ersten Seite eingibt, mittels Java Bean Validation validieren. Also habe ich in meine MVC Konfiguration die "org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" hinzugefuegt. Hier der Code der entsprechenden Spring Konfigurations Datei:
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc]Index of /schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<mvc:annotation-driven conversion-service="conversionService" validator="validator"/>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
<!-- Enables POJO @Controller (like CartController) -->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="order" value="0" />
</bean>
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
<property name="order" value="-1" />
<property name="flowRegistry" ref="flowRegistry" />
</bean>
<!-- Dispatches requests mapped to flows to FlowHandler implementations -->
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
<property name="flowExecutor" ref="flowExecutor" />
</bean>
<!-- Enables annotated methods on POJO @Controller (like CartController) -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<!-- Enables plain controller (e.g. FlowController) -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<!-- Maps a logical view name to a physical resource -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
[/XML]
Auf meiner Bean-Klasse habe ich anschließend eine Property mit @Size(max = 16, min = 16) annotiert und im Service die @Valid Annotation auf den Parameter gesetzt. Leider funktioniert dies nicht. Denn obwohl ich die Property nur mit 4 Zeichen gefüllt habe, bekomme ich keinerlei Fehlermeldung o. ä.
In der Spring Doku ist als Beispiel "leider" nur ein Controller erwähnt, dessen Parameter mittels @Valid geprüft wird (siehe Seite 161 der Spring Webflow Referenzdokumentation). Daher kam bei mir die Idee auf, anstatt eines Services zwischen den beiden Schritten einen Controller reinzuhängen. Leider war dies auch nicht von Erfolg gekrönt, da der Controller solange ignoriert wird, wie das FlowHandlerMapping aktiv ist. Leider habe ich auch noch nicht herausgefunden, wie ich zur Not programmatisch den Flow am Ende des Controllers starten kann, so dass ich auf das FlowHandlerMapping verzichten kann.
Kann mir irgendwer helfen?
Vielen Dank für jeden Hinweis!!
Grüße,
Andreas