Я пытаюсь передать параметр в тег оценки в 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>
Почему я не могу это сделать при установке атрибута для оценки?
Обходные пути не будут работать, потому что мы пытаемся генерировать потоки таким образом.
Благодарю!
Если я правильно понял ваш вопрос, вы можете получить значение 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.