好吧,我想出了一個解決方案。關鍵不是使用流支持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) {
...
}