Старт граней потока
Мой вопрос на сегодня: возможно ли запустить поток лиц без использования h:commandButton
составная часть? В моем конкретном случае я хотел бы использовать h:selectOneMenu
компонент для запуска конкретного потока на основе значения, выбранного пользователем.
1 ответ
Ответ - да, но с небольшой настройкой. Чтобы ввести поток, необходимо создать результат навигации, равный идентификатору потока. Компоненты 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/