Spring webflow - как передать сессию в оценочном выражении? - PullRequest
3 голосов
/ 18 января 2012

Я использую Spring Webflow, но мне нужно получить доступ к моей HttpSession в методе, доступ к которому осуществляется с помощью выражения перехода ==>. (так в файле XML, содержащем мой поток) Пока что мне еще не удалось найти способ передать его моему методу. Я взглянул на контекст запроса потока, но пока не нашел пути.

Ответы [ 4 ]

8 голосов
/ 28 февраля 2012

Я думаю, вам не нужно передавать его, как только вы передадите RequestContext. Вы можете попробовать это:

public class MyAction extends MultiAction{      
    public Event myMethod(RequestContext context){
        HttpSession session = ((HttpServletRequest)context.getExternalContext().getNativeRequest()).getSession();
        ...
    }
}
4 голосов
/ 24 октября 2013

для вставки объекта (например, из flowScope) в сеанс, это работает для меня:

<evaluate expression="externalContext.sessionMap.put('attributeName', flowScope.myObject)"/>
3 голосов
/ 09 марта 2012

У меня была очень похожая необходимость доступа к HttpSession в потоке.Вот как я это сделал:

Сначала взгляните на специальную переменную EL externalContext:

externalContext

Это дает вам один из следующих вариантов:они:

org.springframework.webflow.context.ExternalContext

Интерфейс ExternalContext предоставляет метод с именем getNativeRequest(), который должен вернуть вам объект HttpRequest.(по крайней мере в weblflow 2.0.x)

Вот javadoc: http://static.springsource.org/spring-webflow/docs/2.0.x/javadoc-api/org/springframework/webflow/context/ExternalContext.html#getNativeRequest()

Итак, это означает, что вы должны иметь возможность создать выражение, используя что-то вроде этого:

<evaluate expression="externalContext.nativeRequest.session" result="flowScope.information"/>

В качестве простого теста вы можете использовать такое выражение:

expression="externalContext.nativeRequest.session.id"

для передачи идентификатора сеанса методу.

Конечно, вы можете использовать аналогичный EL для передачи сеанса в методы и т. Д.

1 голос
/ 25 апреля 2014

Это сработало для меня:

<set name="flowRequestContext.externalContext.sessionMap.myId" value="myObject.getId()" />

На клиенте:

Long id = (Long) request.getSession().getAttribute("myId");

Надеюсь, это поможет!

...