JSF-2.2 Faces Flows Возвращаемое значение/кластер/возврат потока

В настоящее время я тестирую Java EE 7 с JSF 2.2 (просто для удовольствия). Особенно новый Faces Flow выглядит действительно здорово, но у меня есть некоторые проблемы с работой PoC.

Вопросы: 1. Если я вызываю поток из другого, можно ли проверить, не вызывается ли текущий поток другим потоком?

Единственное решение, которое я нашел, это передать специальный параметр подпотоку

2. Если я вызываю другой поток через определение потока внутри файла -flow.xml (например, поток, в котором я могу выбрать определенного пользователя). Как я могу передать возвращаемое значение родительскому потоку (например, выбранному пользователю)

3. Glassfish 4 всегда жалуется на то, что обработчик потока помещает объект в сеансы http, которые невозможно сериализовать. Это ошибка? Если нет, означает ли это, что JSF2.2 не является кластеризуемым, соответственно, все открытые потоки будут потеряны, если произойдет сбой узла кластера?

С уважением


person urbiwanus    schedule 15.08.2013    source источник
comment
К 3. Нашел это java.net/jira/browse/JAVASERVERFACES-2908, я думаю моя стеклянная рыба использует более старую версию JSF   -  person urbiwanus    schedule 15.08.2013


Ответы (1)


Не совсем понятно ваши требования к (1), но FacesFlow действительно предоставляет flowScope, с помощью которого вы можете хранить практически все, что хотите, чтобы его содержимое было доступно в рамках текущего потока.

  1. Возьмем, к примеру, вы перешли из потока A в поток B. Теперь вы хотите перейти из потока B обратно в поток A и также передать параметры обратно в поток A. Что вам нужно сделать в вашем файл определения потока для потока A (параметр целевой поток), определите параметр, который вы хотите передать как входящий:

     <inbound-parameter>
        <name>returnParameterFromB</name>
        <value>#{flowScope.returnParameter}</value>
     </inbound-parameter>
    
  2. Определите нужный параметр как исходящий в файле конфигурации потока для параметра исходный поток (поток B).

     <outbound-parameter>
        <name>returnParameterFromB</name>
        <value>#{flowB.returnParameter}</value>
     </outbound-parameter>
    
  3. Находясь в потоке B, вы должны были сохранить необходимое значение в объекте flowScope либо через назначение EL:

     <h:inputText value="#{flowB.returnParameter}"/>
    

    или во вспомогательном @FlowScoped bean-компоненте:

     FacesContext ctxt = FacesContext.getCurrentInstance();
     Map<Object, Object> currentFlowScope = ctxt.getApplication().getFlowHandler().getCurrentFlowScope();
     currentFlowScope.put("returnParameter","value");
    
person kolossus    schedule 15.08.2013
comment
Не заработал ваш пример. Значение в currentFlowScope не задано в родительском потоке (A). Я думаю, что значение будет установлено для дочернего потока (B), который недоступен после выхода из потока. Можете ли вы предоставить полный пример потока A и B (-flow.xml) - person urbiwanus; 15.08.2013
comment
@urbiwanus Если этот пример не работает, почему вы отметили ответ как правильное решение? - person speakr; 17.02.2015
comment
Я использовал пример выше, чтобы получить представление. Извините, что пометил это как полностью правильное, но я указал мне правильное направление - person urbiwanus; 11.03.2015
comment
@urbiwanus - что именно вы сделали, чтобы решить проблему? Вы можете опубликовать полный ответ самостоятельно и принять его - person kolossus; 11.03.2015
comment
это будет сложно, так как я больше не работаю над этим проектом и у меня нет доступа к исходным файлам - person urbiwanus; 12.03.2015