4

現在SpringMVCまたはWebFlowを使用していない非常に大規模な既存のWebアプリケーションにSpringWebFlow2を追加しています。私の仕事はmySite.com/flowsにアクセスしてWebフローをトリガーすることですが、問題が発生しています。/flows/*私のアプローチは、 WebFlowをにマッピングしてDispatcherServletを設定することでした/flows。DispatcherServletが構成されている私のweb.xmlは次のとおりです。

<servlet>
    <servlet-name>flow</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/flowContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>flow</servlet-name>
    <url-pattern>/flows/*</url-pattern>
</servlet-mapping>

Webフローをにマップするためにいくつかの方法を試しました/flowsbase-path私の最初の試みは、次の設定でフローレジストリを使用することでした。

<webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices" base-path="/WEB-INF/app/flows">
    <webflow:flow-location-pattern value="**/*-flow.xml" />
</webflow:flow-registry>

私の理解では、これ/WEB-INF/app/flowsにより、リクエストマッピングを作成するために内部のフォルダ構造が使用されます。私の最初のテストは、( )booking-flow.xmlというサブフォルダー内にフローを追加することでした。そして、素晴らしい!-期待どおりに機能しました。mySite.com/flows/bookingからフローにアクセスできました。OK、でもURLを入れたくないので、フォルダーから移動して、すぐに機能することを期待しましたが、機能しませんでした。フローがまったくマップされていないと思います。booking/WEB-INF/app/flows/booking/bookingbooking-flow.xmlbookingWEB-INF/app/flows

フローをDispatcherServletマッピングのルートにマッピングする方法を知っている人はいますか、それともこれにアプローチするためのより良い方法がありますか?/flowsDispatcherServletにアプリケーション外のリクエストを処理させたくありません。それは私だけですか、それともSpring Web Flowで利用できるドキュメントはほとんどありませんか?

ありがとう!

4

3 に答える 3

5

この方法でSimpleUrlHandlerMappingを使用して、フローをmySite.com/flowsにマップできます。

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings" value="flows=flowController" />
</bean>

<bean id="flowController" class="org.springframework.webflow.mvc.servlet.FlowController">
    <property name="flowExecutor" ref="flowExecutor" />
</bean>

<webflow:flow-executor id="flowExecutor" flow-registry="flowRegistry">
</webflow:flow-executor>

<webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices" base-path="/WEB-INF/app/flows">    
    <webflow:flow-location path="booking-flow.xml" id="flows"/>
</webflow:flow-registry>
于 2012-07-03T15:03:04.063 に答える
1

別の方法はこのようになる可能性があります

<!-- Registry of executable flows -->
<flow:flow-registry flow-builder-services="flowBuilderServices"
    id="flowRegistry" base-path="/WEB-INF/flows/">
    <flow:flow-location id="hello" path="hello-flow.xml" />
    <flow:flow-location path="start-flow.xml" id="main" />

</flow:flow-registry>

URLマッピングに応じてhello.htmやhello.htmlなどのIDを使用してフローを呼び出します。それぞれのファイルの最初のビューステートがロードます

于 2013-01-03T12:11:55.057 に答える
0

現在のファイル構造の設定に従って、次のいずれかを実行できます。

<webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices" base-path="/WEB-INF/app/flows">    
    <webflow:flow-location path="booking-flow.xml" id="flows"/>
</webflow:flow-registry>

つまり、IDを明示的に指定します。この場合、該当するURLは-mySite.com/flows

また

ベースコンテキストからフローを削除できます-

<webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices" base-path="/WEB-INF/app">
    <webflow:flow-location-pattern value="**/*-flow.xml" />
</webflow:flow-registry>

でファイルを出力します/WEB-INF/app/flows/booking-flow.xml。これにより、ベースパスとファイル名の間のパスに対応するIDが自動的に生成されます。これによりflows、URLが適用されます。 mySite.com/flows

于 2016-01-15T19:02:19.280 に答える