2012-07-02 225 views
4

我將Spring Web Flow 2添加到當前未使用Spring MVC或Web Flow的非常大的現有Web應用程序中。我的任務是通過訪問mySite.com/flows觸發Web Flow,並且遇到困難。我的方法是設置DispatcherServlet,映射爲/flows/*,將Web Flow映射到/flows。這裏是我的web.xml在DispatcherServlet的配置:Spring Web Flow請求映射

<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 Flow的映射到/flows。我的第一次嘗試是使用流動的註冊表與base-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/WEB-INF/app/flows/booking)的子文件夾內添加我的流程booking-flow.xml。而且,太棒了! - 它按預期工作。我能夠從mySite.com/flows/booking訪問流程。好的,但我不想在網址中使用/booking,所以我將booking-flow.xmlbooking文件夾中移出,並直接輸入WEB-INF/app/flows,並且希望能爲我工作,但它不會 - 我不認爲流映射在所有。

有誰知道我可以如何將流映射到DispatcherServlet映射的根,還是有更好的方法來處理這個問題?我不希望DispatcherServlet在我的應用程序中處理/flows以外的任何請求。僅僅是我,還是Spring Web Flow上的文檔很少?

謝謝!

+0

沒有對dir結構進行任何更改的最佳選項是從'base- path'。見下面的答案。 –

回答

4

您可以使用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> 
+0

它的工作原理!謝謝! –

+0

不客氣:) –

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> 

調用使用id的流狀你好。 htm或你好 .html取決於url mapping.first視圖狀態將在相應的文件中加載。

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

OR

你可以刪除流base context -

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

和ou t在/WEB-INF/app/flows/booking-flow.xml的文件。這會自動生成對應於基本路徑和文件名之間的路徑的id--這將是flows,並且可適用的URL將爲mySite.com/flows