SpringWebFlowを使用してJSFアプリケーションをセットアップしようとしています。
Spring3.1を使用していますSpringfaces2.3.1 JSF(api、impl)2.1.6
私の問題は、プログラムが私のjsfビューの正しい場所を取得していないということです。
私はのようないくつかのチュートリアルを見つけました
またはhttp://dgparsons.org/jsf-and-spring-webflow.html(jsf とスプリングWebフローを統合する場合)。
これらのビューの1つでは、解決は次のように実行されます。
<bean id="faceletsViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.faces.mvc.JsfView"/>
<property name="prefix" value="/WEB-INF/views" />
<property name="suffix" value=".xhtml" />
</bean>
そして、xhtmlファイルを/ WEB-INF /views/フォルダーに入れました。
私のフローはディレクトリ/WEB-INF/config/flow/start.flowにあります
私が試してみると、プログラムは常に/WEB-INF/config/flow/start.xhtmlフォルダーからstart.xhtmlを開きたいと思っています。
したがって、UrlBasedViewResolverを完全に無視しているようです。
私のFlowBuilderServicesは次のように構成されています。
<beans:bean id="flowBuilderServices"
class="org.springframework.webflow.engine.builder.support.FlowBuilderServices">
...
<beans:property name="viewFactoryCreator">
<beans:bean
class="org.springframework.faces.webflow.JsfViewFactoryCreator" />
</beans:property>
...
</beans:bean>
チュートリアルにはJsfViewFactoryCreatorがなく、それに関するチュートリアルが見つかりません。
javadocからのように、JsfViewFactoryCreator/JsfViewFactoryはRESTORE_VIEWフェーズを担当します。そこで、JsfViewFactoryのgetView()メソッドのソースコードに飛び込みました。
105行目
UIViewRoot viewRoot = viewHandler.restoreView(facesContext, viewName);
FlowViewHandlerが呼び出され、フローファイルのパスに対して間違ったパスが生成されます。
resourcePath = resolveResourcePath(RequestContextHolder.getRequestContext(), viewId);
だから私の質問は今です。UrlBasedViewResolverをflowRegistry/flowbuilderservicesに正しく関連付けて、xhtmlファイルへのパスとして/WEB-INF/views/*.xthmlを取得するにはどうすればよいですか。
または、UrlBasedViewResolverを使用するのが古風な場合(jsfの春のWebフロードキュメントでは見られなかったため)、定義したディレクトリを使用するようにWebFlowBeanを正しく構成するにはどうすればよいですか。
完全を期すために、ここに私のwebflow-config.xmlファイルがあります
<!-- Executes flows: the central entry point into the Spring Web Flow system -->
<flow-executor id="flowExecutor">
<flow-execution-listeners>
<listener ref="facesContextListener" />
<listener ref="securityListener" />
</flow-execution-listeners>
</flow-executor>
<!-- The registry of executable flow definitions -->
<flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices"
base-path="/WEB-INF/config/flow">
<flow-location-pattern value="/*.xml" />
</flow-registry>
<beans:bean id="flowBuilderServices"
class="org.springframework.webflow.engine.builder.support.FlowBuilderServices">
<beans:property name="expressionParser">
<beans:bean
class="org.springframework.webflow.expression.el.WebFlowELExpressionParser">
<beans:constructor-arg>
<beans:bean class="com.sun.el.ExpressionFactoryImpl" />
</beans:constructor-arg>
</beans:bean>
</beans:property>
<beans:property name="viewFactoryCreator">
<beans:bean
class="org.springframework.faces.webflow.JsfViewFactoryCreator" />
</beans:property>
<beans:property name="conversionService">
<beans:bean
class="org.springframework.binding.convert.service.DefaultConversionService">
</beans:bean>
</beans:property>
</beans:bean>