我目前正在使用JSF 2.2测试Java EE 7(只是为了好玩)。特别是新的Faces Flow看起来非常棒,但是我的PoC工作有些麻烦。
问题: 1.如果我从另一个呼叫流,是否可以检查当前流是否被另一个“调用”?
我找到的唯一解决方案是将特殊参数传递给子流
2。 如果我通过-flow.xml中的流调用定义调用另一个流(例如,我可以选择某个用户的流)。如何将返回值传递给父流(例如所选用户)
3。 Glassfish 4总是抱怨说,flowHandler将一个对象放入http会话中,这是不可序列化的。这是一个错误吗?如果不是这意味着JSF2.2不可群集,如果群集节点崩溃,所有开放流都将丢失?
此致
答案 0 :(得分:1)
不完全清楚您对(1)的要求,但FacesFlow确实提供了flowScope
,您可以在其中存储您想要的任何内容,其内容在当前流程范围内可用。
例如,您已从流程A导航到流程B.您现在想要从流程B导航回流程A 并且也将参数传递回流程A.您需要在流程定义文件中为流程A(参数目标流程),将您想要传递的参数定义为入站:
<inbound-parameter>
<name>returnParameterFromB</name>
<value>#{flowScope.returnParameter}</value>
</inbound-parameter>
在参数源流程的流配置文件中将所需参数定义为出站(流程B)
<outbound-parameter>
<name>returnParameterFromB</name>
<value>#{flowB.returnParameter}</value>
</outbound-parameter>
在流程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");