Передача ссылочного атрибута в оценку состояния действия в весеннем веб-потоке

1

Я пытаюсь передать параметр в тег оценки в Spring WebFlow

<action-state id="activateOption">
    <evaluate expression="someService.call()" result="flowScope.serviceResult" result-type="java.lang.String">
        **<attribute name="x" value="flowScope.serviceInput"/>**
    </evaluate>
    <transition on="0" to="Stop_View"/>
</action-state>

В компоненте SomeService, когда я получаю этот параметр x следующим образом:

RequestContextHolder.getRequestContext().getAttributes().get("x") 

он возвращает строку "flowScope.serviceInput" вместо значения flowScope.serviceInput, которое я установил ранее в потоке, в другом состоянии.

Я могу передать ссылочные значения в on-entry следующим образом:

<action-state id="some action">
    <on-entry>
        <set name="flowScope.someName" value="flowScope.someOtherParam + ' anything!!'" type="java.lang.String"/>
</on-entry>

Почему я не могу это сделать при установке атрибута для оценки?

Обходные пути не будут работать, потому что мы пытаемся генерировать потоки таким образом.

Благодарю!

  • 0
    Можете ли вы уточнить это «он возвращает строку« flowScope.serviceInput »вместо значения этого выражения». Что вы ожидаете оценить, чтобы выполнить в вашем сценарии?
  • 0
    @Prasad Мне нужно .getAttributes (). Get ("x"), чтобы вернуть значение переменной flowScope.serviceInput, которую я ранее установил в другом состоянии потока, а не в строке "flowScope.serviceInput"
Теги:
spring
spring-webflow

1 ответ

1
Лучший ответ

Если я правильно понял ваш вопрос, вы можете получить значение flowScope.serviceInput:

    RequestContextHolder.getRequestContext().getFlowScope().get("serviceInput")

В выражении Set выражение вычисляется с помощью пар переменных переменной valueContext.

В оценочном выражении также выражение вычисляется (а не значение атрибута) в requestContext. Таким образом, не будет поиск значения атрибута в областях переменных-значений с параметром requestContext, но он будет зафиксирован, как указано в определении потока. По этой причине вы получаете значение как "flowScope.serviceInput" для атрибута оценки, но для установки значения, содержащегося в нем.

Но вы можете попробовать использовать EL, чтобы получить его как:

    <attribute name="x" value="#{flowScope.serviceInput}"/> 
    for SWF version > 2.1 

или с

    <attribute name="x" value="${flowScope.serviceInput}"/> 
    for SWF version < 2.1 where ever you are setting this attribute value.
  • 0
    Спасибо, решение EL соответствует потребностям. Мне не повезло с настройкой EL до сих пор, но это еще одна проблема. Еще раз спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню