2012-07-02 1 views
4

Я добавляю Spring Web Flow 2 к очень большому существующему веб-приложению, которое в настоящее время не использует Spring MVC или Web Flow. Моя задача - запустить веб-поток, перейдя на mySite.com/flows, и у меня возникают трудности. Мой подход состоял в том, чтобы настроить DispatcherServlet с отображением /flows/* и отобразить веб-поток до /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-flow.xml внутри подпапки под названием booking (/WEB-INF/app/flows/booking). И здорово! - он работал, как ожидалось. Мне удалось получить доступ к потоку из mySite.com/flows/booking. Хорошо, но я не хочу /booking в URL-адресе, поэтому я переместил booking-flow.xml из папки booking и прямо в WEB-INF/app/flows и ожидал, что это сработает для меня, но это не так. Я не думаю, что поток, отображаемый на все.

Кто-нибудь знает, как я могу отобразить поток в корень сопоставления DispatcherServlet, или есть лучший способ приблизиться к этому? Я не хочу, чтобы DispatcherServlet обрабатывал любые запросы за пределами /flows в моем приложении. Это только я, или есть очень мало документации, доступной в Spring Web Flow?

Спасибо!

+0

Лучший вариант без внесения каких-либо изменений в структуру dir заключается в удалении 'потоков' из' 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> 

Invoke потоков с использованием идентификаторов как привет. htm или hello .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> 

т.е. вы даете идентификатор явно в этом случае 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> 

и ou т ваш файл в /WEB-INF/app/flows/booking-flow.xml. Это автоматически сгенерирует идентификатор, соответствующий пути между базовым путем и вашим именем файла, который будет flows, и снова URL-адрес будет mySite.com/flows