Повторное использование определений Spring Webflow с различными реализациями действий - PullRequest
0 голосов
/ 19 сентября 2008

У меня довольно большое определение веб-потока, которое я не хочу копировать / вставлять для повторного использования. В XML есть ссылки на bean-компонент action, что вполне естественно.

Я хочу использовать одно и то же определение потока дважды: второй раз с действиями, настроенными по-разному (внедрить в него различные реализации службы).

Есть ли простой способ сделать это?


Проблема в том, что я хочу использовать один и тот же поток одновременно с разными компонентами в одном приложении. Копировать / Вставить плохо, но я пока не вижу другого решения.

Ответы [ 4 ]

2 голосов
/ 22 сентября 2008

Вы можете попытаться создать новый поток, расширяющий «довольно большой», и добавить к нему flowExecutionListeners.

Интерфейс "FlowExecutionListener" определяет методы для следующих событий при выполнении потока:

  • запрос отправлен
  • requestProceessed
  • sessionCreating
  • sessionStarting
  • sessionStarted
  • eventSignaled
  • transitionExecuting
  • stateEntering
  • viewRendered
  • viewRendering
  • stateEntered
  • 1028 * помедлил *
  • возобновление
  • sessionEnding
  • sessionEnded
  • exceptionThrown

Вы можете написать обработчик, который внедрит необходимые ресурсы в ваш поток (и использовать разные дескрипторы с разными потоками), сохранив его в RequestContext, где вы сможете получить к нему доступ в определении потока.

Обратите внимание, что в этом случае вам все равно придется изменить «довольно большой поток», чтобы использовать эти ресурсы вместо прямой ссылки на компоненты.

1 голос
/ 30 октября 2010

Я в том же исправлении, в котором вы находитесь ... У меня есть разные подклассы, у которых есть соответствующие бины действия, но большая часть потока одинакова. В прошлом мы только что скопировали и вставили ... не доволен этим! У меня есть некоторые идеи, которые я собираюсь попробовать с использованием языка выражений. Во-первых, я придумал фабрику компонентов действия, которая будет возвращать правильный компонент действия для использования в данном классе, затем я могу вызвать эту фабрику, чтобы установить переменную, которую я могу использовать вместо жестко заданного имени компонента.

Вот часть потока:

<action-state id="checkForParams">
    <on-entry>
        <set name="flowScope.clientKey" value="requestParameters.clientKey"/>
        <set name="flowScope.viewReportBean" 
                 value="reportActionFactory.getViewBean(reportUnit)"/>
    </on-entry>
    <evaluate expression="viewReportBean"/>

Оценка в последней строке обычно относится непосредственно к бобу, но теперь она относится к результату "сета", который я только что сделал.

Хорошие новости - вызывается правильный боб.

Плохие новости - все в области потока должно быть Serializable, поэтому я получаю NotSerializableException - arggh!

Я могу попробовать установить что-то на очень недолгую область, и в этом случае ему нужно будет постоянно вызываться ... или я могу найти какой-то прокси, который содержит настоящий бин как объявленный прокси " переходная».

Кстати, я использую Spring 2.5.6 и webflow 2.0.7. Более поздние версии могут иметь лучшие способы справиться с этим; в частности, ЭЛ, кажется, привлекли некоторое внимание. Я все еще застрял с OGNL, который является Spring 1.x EL.

Я уверен, что некоторые гуру веб-потока знают другие способы сделать что-то менее неуклюжим образом ...

0 голосов
/ 08 декабря 2013

Попробуйте реорганизовать общую настраиваемую деталь в подпотоке и вызвать подпоток из других основных потоков, где вы хотите использовать его повторно.

Передайте параметры в подпоток, чтобы настроить его любым необходимым способом, используя язык выражения Spring для передачи различных пружинных компонентов и т. Д.

0 голосов
/ 19 сентября 2008

Не думаю, что вы можете использовать одно и то же определение веб-потока с действиями, настроенными двумя разными способами.

Если вы хотите использовать разные действия, вам придется либо перенастроить компоненты действия, а затем повторно развернуть приложение или создать отдельное определение веб-потока с различными настройками компонентов.

Этот является отличным ресурсом Spring WebFlow.

...