2014-01-17 38 views
0

我正在構建一個簡單的POC來測試Faces Flow。流程取決於外部參數?

  • 第1頁:顯​​示公司列表。用戶選擇公司A然後進到第2頁
  • 2頁:所選擇的公司的網頁上,用戶點擊一個commandLink以啓動向導來創建新的僱員將被添加到該公司A.

Behing場景我有一個@FlowScoped("addNewUsertoCompanyFlow")MyFlowBean

在其@PostConstruct方法中,MyFlowBean需要從服務(@Inject)中獲取與公司A對應的對象。

什麼是讓MyFlowBean知道公司A的ID的正確方法,以便它可以從服務中獲取?

謝謝。

回答

2

好吧,我想出了一個解決方案。關鍵不是使用流支持bean @PostConstruct,而是使用流初始化器,我可以在這裏獲取請求參數。

所以我使用的表格一些額外的輸入,將開始我的流程:

<h:form id="myForm" prependId="false"> 
    <h:commandLink value="Enter myFlow" action="my-flow"/> 
    <h:inputHidden id="parameter" name="parameter" value="8"/> 
</h:form> 

在我的流程定義,我定義爲流程的初始化,調用流支持bean一些方法

@Produces @FlowDefinition 
public Flow defineFlow(@FlowBuilderParameter FlowBuilder flowBuilder) { 
String flowId = "my-flow"; 
    flowBuilder.id("", flowId); 
    flowBuilder.initializer("#{myFlowBean.startFlow()}"); 
    ... 
} 

我已經抓住了後臺bean中的參數。

@Named 
@FlowScoped("my-flow") 
public class MyFlowBean implements Serializable { 

    public void startFlow() { 
     String parameter = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("parameter"); 
     //now do sthg with the parameter, such as fetching data from an injected service 
     .... 
    } 
} 

當然,它也可以做到這一點,在流程定義級別

flowBuilder.initializer("#{trainingFlowBean.startFlow(param['parameter'])}"); 

,只是有在startFlow方法的參數

public void startFlow(String parameter) { 
    ... 
}