我今天的问题是:是否可以在不使用h:commandButton
组件的情况下启动面流?在我的特殊情况下,我想使用该h:selectOneMenu
组件根据用户选择的值启动特定流程。
问问题
904 次
1 回答
6
答案是肯定的,但需要稍作调整。要进入流程,需要创建一个与流程 ID 相同的导航结果。UICommand组件(如 h:commandButton 和 h:commandLink)可以做到这一点,但UIInput组件不能(它们缺少“action”属性)。但是,导航可以通过编程方式触发,例如使用ValueChangeListener:
<h:form>
<h:selectOneMenu value="#{requestScope.selectedFlow}">
<f:selectItem itemLabel="--- Select a Flow ---" noSelectionOption="true" />
<f:selectItem itemLabel="Flow A" itemValue="flow-a" />
<f:selectItem itemLabel="Flow B" itemValue="flow-b" />
<f:valueChangeListener type="example.NaviagtionTargetListener" />
<f:ajax execute="@form" render="@all"/>
</h:selectOneMenu>
</h:form>
对应的ValueChangeListener:
public class NaviagtionTargetListener implements ValueChangeListener {
@Override
public void processValueChange(ValueChangeEvent event) throws AbortProcessingException {
String target = (String) event.getNewValue();
ConfigurableNavigationHandler nh = (ConfigurableNavigationHandler) FacesContext.getCurrentInstance().getApplication().getNavigationHandler();
nh.performNavigation(target);
}
}
我在 GitHub[1] 上创建了一个示例,并写了一篇关于 FacesFlow[2] 用法的博文
[1] https://github.com/tasel/facesflow-example
[2] http://blog.oio.de/2014/02/12/a-comprehensive-example-of-jsf-faces-flow/
于 2014-02-13T08:21:50.950 回答