我的使用案例:用户选择表格中的问卷。提交表单后,会启动面部流程以显示问卷的问题。
要将问卷发送到流程,在流程的bean中我注入包含表单的页面的CDI bean。
我想知道是否还有其他方法可以将调查问卷发送给流程。如果有几种方法,最好的方法是什么?
答案 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方法