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

问题描述 投票:2回答:3

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

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

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

flow jsf-2.2
3个回答
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()}");
    ...
}

支持豆

@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


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>

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


0
投票

这可以使用初始化程序标记在flow xml文件中完成

   <initializer>
       #{myFlowBean.startFlow()}
   </initializer>

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

© www.soinside.com 2019 - 2024. All rights reserved.