1

我正在构建一个简单的 POC 来试验 Faces Flow。

  • 第 1 页:显示公司列表。用户选择 A 公司,然后转到第 2 页。
  • 第 2 页:在选定的公司页面上,用户单击命令链接以启动向导以创建要添加到公司 A 的新员工。

作为场景,我有一颗@FlowScoped("addNewUsertoCompanyFlow")豆子MyFlowBean

在其@PostConstruct方法中,MyFlowBean需要从服务中获取与公司 A 对应的对象 ( @Inject)。

让 MyFlowBean 知道公司 A 的 ID 以便它可以从服务中获取它的正确方法是什么?

谢谢。

4

1 回答 1

3

好的,我想出了一个解决方案。关键不是使用流支持 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) {
    ...
}
于 2014-01-18T11:08:45.023 回答