JSF-2.2 Faces Flows返回值/集群/流返回

时间:2013-08-15 06:27:01

标签: jsf jsf-2 jsf-2.2 java-ee-7

我目前正在使用JSF 2.2测试Java EE 7(只是为了好玩)。特别是新的Faces Flow看起来非常棒,但是我的PoC工作有些麻烦。

问题: 1.如果我从另一个呼叫流,是否可以检查当前流是否被另一个“调用”?

我找到的唯一解决方案是将特殊参数传递给子流

2。  如果我通过-flow.xml中的流调用定义调用另一个流(例如,我可以选择某个用户的流)。如何将返回值传递给父流(例如所选用户)

3。  Glassfish 4总是抱怨说,flowHandler将一个对象放入http会话中,这是不可序列化的。这是一个错误吗?如果不是这意味着JSF2.2不可群集,如果群集节点崩溃,所有开放流都将丢失?

此致

1 个答案:

答案 0 :(得分: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中,您必须通过EL赋值在flowScope对象中存储必要的值:

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

    或支持@FlowScoped bean:

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