如何将数据发送到faces-flow?

时间:2013-09-11 13:46:15

标签: flow jsf-2.2

我的使用案例:用户选择表格中的问卷。提交表单后,会启动面部流程以显示问卷的问题。

要将问卷发送到流程,在流程的bean中我注入包含表单的页面的CDI bean。

我想知道是否还有其他方法可以将调查问卷发送给流程。如果有几种方法,最好的方法是什么?

3 个答案:

答案 0 :(得分:2)

您可以通过表单传递参数,并在初始化流程时调用的初始化方法中获取它们。

表单(只需将inputHidden参数替换为您用于选择问卷的任何内容)

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

流量

@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 the questionnaire
    ....
    }
}

有关详细信息,请参阅this answer

答案 1 :(得分:0)

除了“thomas.g”的有用回答:

我遇到了同样的问题,但无法使用hiddenInput方法修复它。尽管prependId =“false”属性,我的id和隐藏输入字段的名称被我使用的primefaces p:dataTable元素改变了。问题可以通过h:commandLink元素中的f:param elemtent来解决:

<h:commandLink value="Enter myFlow" action="my-flow" >
    <f:param name="parameter" value="8"/>
</h:commandLink>

我希望这对有类似问题的人有所帮助。

答案 2 :(得分:0)

这可以使用初始化程序标记

在flow xml文件中完成
   <initializer>
       #{myFlowBean.startFlow()}
   </initializer>

在流作用域bean中调用你的initialize方法