【发布时间】:2014-01-17 10:57:24
【问题描述】:
进入 Faces Flow 后,我想通过转到不属于该流的任何页面来退出它。
问题是,如果我出去,例如通过h:link,流程不会被破坏。
实际上,如果我再次单击动作为 flowId 的 h:commandButton,我会返回到上一个流而不是创建新流。
如何在不让用户显式单击h:commandButton 的情况下退出流程,该h:commandButton 的操作对应于流程的返回节点?
有可能吗?
编辑:
我们以这个流程为例(来自JEE 7 samples)
@Produces @FlowDefinition
public Flow defineFlow(@FlowBuilderParameter FlowBuilder flowBuilder) {
String flowId = "flow1";
flowBuilder.id("", flowId);
flowBuilder.viewNode(flowId, "/" + flowId + "/" + flowId + ".xhtml").markAsStartNode();
flowBuilder.returnNode("taskFlowReturn1").
fromOutcome("#{flow1Bean.returnValue}");
flowBuilder.returnNode("goHome").
fromOutcome("#{flow1Bean.homeValue}");
flowBuilder.inboundParameter("param1FromFlow2", "#{flowScope.param1Value}");
flowBuilder.inboundParameter("param2FromFlow2", "#{flowScope.param2Value}");
flowBuilder.flowCallNode("call2").flowReference("", "flow2").
outboundParameter("param1FromFlow1", "param1 flow1 value").
outboundParameter("param2FromFlow1", "param2 flow1 value");
return flowBuilder.getFlow();
}
用户点击会终止流程
<h:commandButton id="index" value="home" action="goHome" />
或
<h:commandButton id="return" value="return" action="taskFlowReturn1" />
但是如果用户点击了怎么办
<h:link outcome="someOutcomeUnrelatedToTheFlow"/>
或者如果用户在浏览器中更改了 url,而不删除jfwid?似乎流程没有终止,但用户实际上是在流程之外浏览。
这对我来说似乎有点奇怪:如果没有用户对 commandButton/commandLink 的特定操作,我找不到任何退出流程(并释放支持 bean)的方法。
顺便说一句:我正在 WildFly 8 CR1 上对此进行测试。
【问题讨论】:
-
您可以发布您的流程声明吗?
-
是的,我刚刚编辑了问题。
标签: jsf exit jsf-2.2 faces-flow