2013-08-15 1 views
1

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

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

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

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

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

С уважением

+0

To 3. Нашли это https://java.net/jira/browse/JAVASERVERFACES-2908 Я думаю, что моя стеклянная рыба использует более старую версию JSF – urbiwanus

ответ

1

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

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

    <inbound-parameter> 
        <name>returnParameterFromB</name> 
        <value>#{flowScope.returnParameter}</value> 
    </inbound-parameter> 
    
  2. определить нужный параметр, как OUTB ound в конфигурации потока файла источника параметр потока (поток Б)

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

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

    или в бэк @FlowScoped боба:

    FacesContext ctxt = FacesContext.getCurrentInstance(); 
    Map<Object, Object> currentFlowScope = ctxt.getApplication().getFlowHandler().getCurrentFlowScope(); 
    currentFlowScope.put("returnParameter","value"); 
    
+1

Не получил ваш пример работы. Значение в currentFlowScope не задано в родительском потоке (A). Я думаю, что значение будет установлено на дочерний поток (B), который недоступен после выхода из потока. Можете ли вы представить полный пример потоков A и B (-flow.xml) – urbiwanus

+0

@urbiwanus Если этот пример не работает, почему вы отметили ответ как правильное решение? – speakr

+0

Я использовал приведенный выше пример, чтобы получить представление. Извините за то, что отметили это как полностью правильное, но я указал мне в правильном направлении – urbiwanus

Смежные вопросы