2013-04-21 1 views
0

Я собираюсь сохранить свой идентификатор объекта в сессию в одном из состояний действий:Session, внутр и Типы объектов в Spring Web Flow

<on-exit> 
<evaluate expression="persistantService.saveOrUpdate(flowScope.entity)"/> 
<evaluate expression="externalContext.sessionMap.put('entityId', flowScope.entity.Id)"/> 
</on-exit> 

На самом деле, entity.Id поле - это внутр.

В начале потока я пытаюсь получить entityId из сеанса, если он существует, загрузите его из хранилища, иначе - создайте новый. Вот как я полагаю, чтобы сделать это:

<decision-state id="test"> 
<if test="externalContext.sessionMap.contains('entityId')" 
then="findExistingEntity" 
else="creteNewEntity"/> 
</decision-state> 

<action-state id="findExistingEntity"> 
<evaluate expression="persistantService.findEntityById(externalContext.sessionMap.entityId)" 
result="flowScope.entity" /> 
</action-state> 

Проблема заключается в том, что persistantService.findEntityById принимает INT, но не объект или Integer, которые взяты из сессии. Как это можно решить? Как преобразовать externalContext.sessionMap.entityId в int? Или, возможно, есть другой способ, чтобы проверить, что объект сохранен и загрузить его из стойкого хранилища?

+0

Почему вы работаете с sessionmap? я бы использовал диалог. Я действительно не уверен, работает ли этот файл sessionmap в потоке xml –

ответ

0

я бы использовал conversationScope

<on-exit> 
    <evaluate expression="persistantService.saveOrUpdate(flowScope.entity)"/> 
    <set name="conversationScope.entityId" value="flowScope.entity.Id"/> 
</on-exit> 

...

<decision-state id="test"> 
    <if test="conversationScope.entityId != null" 
    <!-- i'm not sure if that works you might put the test in a method in a bean and call that--!> 
     then="findExistingEntity" 
     else="creteNewEntity"/> 
</decision-state> 

<action-state id="findExistingEntity"> 
    <evaluate expression="persistantService.findEntityById(conversationScope.entityId)" 
     result="flowScope.entity" /> 
</action-state>