我在Faces Flow中看到的每个示例都涉及仅在特定流程中使用的独占视图。我想要做的是创建一个几乎完全由视图组成的流,这些视图将在多个流中使用,和/或可能在流之外。这种可视性的可重用性是否可行,或者Faces Flows不是以这种方式使用的?
答案 0 :(得分:3)
Faces Flow基本上由JSF视图组成(或可以),它们本身是可重用的。如果您参考this post:
JSF 2.2中的新流程是什么?
应用程序流不再局限于页面之间的流动,而是定义为节点之间的流程#34;。有五种不同类型的节点:
查看:应用程序中的任何JSF页面
方法调用:通过EL
从流程图调用应用程序逻辑切换:基于布尔值EL的流程图中的导航决策
流程调用:使用参数调用另一个流并接收返回值
流程返回:返回呼叫流程
第一点本身就回答了你的问题!
从OP编辑(@jdessey)
我已经在测试中确认了接受的答案,并希望在实施过程中分享一些警告。
Programmatic flow definition (i.e. @FlowDefinition annotation) is only processed if the class that contains the annotated method is itself a normal scoped CDI bean such as `@ApplicationScoped`. (Might be a bug - I'm using JSF 2.2.4 and Weld 2.0.4)
When defining the view node using FlowBuilder.viewNode(String viewNodeId, String vdlDocumentId), the document id must be the absolute path to the .xhtml file. This is in the javadoc but not intuitive IMO because since 2.0 we are used to implicit navigation.
代码:
@ApplicationScoped
public class MyFlow implements Serializable {
@Produces @FlowDefinition
public Flow defineFlow(@FlowBuilderParameter FlowBuilder flowBuilder) {
flowBuilder.id("", "myFlow");
flowBuilder.viewNode("anyView", "/absolutePathToView.xhtml").markAsStartNode();
return flowBuilder.getFlow();
}
}
现在要导航到此流程,只需使用" myFlow"作为隐式导航案例,例如:
<p:menuitem value="Begin Flow" action="myFlow" />