标签: faces-flow

如何使用faces-redirect输入JSF 2.2流程

我有一个基本的流程示例工作:

src/main/webapp
|
|- index.xhtml
|- flow1
   |- flow1-flow.xml
   |- flow1.xhtml
Run Code Online (Sandbox Code Playgroud)

index.xhtml有一个简单的表单,用参数输入流:

<h:form>
    Click to enter flow1
    <h:commandButton action="flow1" value="Flow 1">
        <f:param name="testInput" value="hi there"/>
    </h:commandButton>
</h:form>
Run Code Online (Sandbox Code Playgroud)

flow1.xhtml显示参数,并允许您在流范围中输入值:

<h:form>
    Hi this is page 1.
    <h:inputText label="Enter something:" value="#{flowScope.testOutput}"/><br/>
    Request parameter: #{param['testInput']}<br/>
    <h:commandButton action="returnFromFlow1"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)

flow1-flow.xml只将返回节点定义为"returnFromFlow1"并将其设置为/index.xhtml.

这似乎有效.我想在输入流时实现post-redirect-get,以便浏览器地址栏与视图保持同步.所以我自然尝试了action ="flow1?faces-redirect = true".此更改阻止流程执行..它只是在单击按钮时重新加载index.xhtml.

然后我尝试了action ="flow1/flow1.xhtml?faces-redirect = true".这会加载页面并按预期重定向,但流程未初始化.当我在流程中提交表单时,我收到有关flowScope解析为null的错误.

做了一点研究,我找到了一个提示,设置"to-flow-document-id"来强制它初始化流程.所以我添加到我的命令按钮.没变.

有关如何实现这一目标的任何想法?

jsf post-redirect-get jsf-2.2 faces-flow

9
推荐指数
1
解决办法
2812
查看次数

如何退出流程?

一旦我进入Faces Flow,我想通过转到任何不属于流程的页面来退出它.

问题是,如果我外出,例如通过一个,流量不会被破坏h:link.实际上,如果我再次点击h:commandButton其动作是flowId,我将返回上一个流程而不是创建新流程.

如何在没有用户明确单击h:commandButton其操作对应于流的返回节点的情况下退出流?它甚至可能吗?

编辑:

让我们以此流程为例(来自JEE 7样本)

@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();
}
Run Code Online (Sandbox Code Playgroud)

如果用户点击,流程将被终止

<h:commandButton id="index" value="home" action="goHome" />
Run Code Online (Sandbox Code Playgroud)

要么

<h:commandButton id="return" value="return" action="taskFlowReturn1" />
Run Code Online (Sandbox Code Playgroud)

但是,如果用户点击该怎么办?

<h:link outcome="someOutcomeUnrelatedToTheFlow"/>
Run Code Online (Sandbox Code Playgroud)

或者,如果用户更改浏览器中的URL,而不删除jfwid?似乎流程没有终止,但用户实际上是在流程之外浏览.

这对我来说似乎有点奇怪:我没有找到任何方法退出流程(并释放支持bean),而没有来自用户在commandButton/commandLink上的特定操作.

顺便说一下:我在WildFly …

jsf exit jsf-2.2 faces-flow

5
推荐指数
1
解决办法
2210
查看次数

起始面流动

我今天的问题是:是否可以在不使用h:commandButton组件的情况下启动面流?在我的特定情况下,我想使用该h:selectOneMenu组件根据用户选择的值启动特定流程.

jsf-2 jsf-2.2 faces-flow

2
推荐指数
1
解决办法
887
查看次数

使用JSF Faces Flow而不是普通导航系统的优点

我正在探索JSF 2.2 Faces Flow功能,但我仍然不确定使用Faces Flow定义流程而不是使用普通导航系统(在链接或按钮中调用facelets)有什么好处?

jsf jsf-2.2 faces-flow

2
推荐指数
1
解决办法
3538
查看次数

标签 统计

faces-flow ×4

jsf-2.2 ×4

jsf ×3

exit ×1

jsf-2 ×1

post-redirect-get ×1