2013-10-14 41 views
2

我爲Faces Flow看到的每個示例都涉及僅在特定流程中使用的排他視圖。我想要做的是創建一個幾乎完全由視圖組成的流,這些視圖將在多個流中使用,和/或可能在流之外使用。視圖的可重用性是可能的,還是Faces Flows不意味着以這種方式使用?面對可重用視圖的流動

Faces Flow example from JavaEE 7 doc

+0

您可以隨意更新我的回答您的測試內容。最好在答案字段中發佈答案,而不是在問題本身中發佈答案! –

+0

我編輯了答案(看起來好像會在同行評審後提供)。感謝提示 - 我仍然習慣於格式。 – jdessey

+0

您的修改已被拒絕,但我已將其恢復;-) –

回答

2

面臨流基本上由(或者可以是)由JSF視圖,是可重複使用的本身。如果您參考this post

JSF 2.2中有哪些新的流程?

應用程序的流程不再侷限於頁面之間的流程,而是定義爲「節點」之間的流程。有五種不同類型的節點:

查看:在應用程序中的任何JSF頁面

方法調用:通過EL

開關調用從流圖的應用邏輯:導航決策在基於布爾型的流程圖中EL

流量調用:用參數調用另一個流並接收r E打開值

流回報:返回到調用流

第一點本身回答您的問題!


編輯從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" />