Начальный поток граней

Мой вопрос на сегодня: можно ли запустить поток лиц без использования компонента h:commandButton? В моем конкретном случае я хотел бы использовать компонент h:selectOneMenu для запуска определенного потока на основе значения, выбранного пользователем.


person jigga    schedule 04.11.2013    source источник
comment
Что вы пробовали? Используя поддержку Ajax с selectOneMenu, я не понимаю, почему нельзя запустить поток, как вы делаете с h:commandButton.   -  person LaurentG    schedule 10.11.2013


Ответы (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/

person tasel    schedule 13.02.2014
comment
Черт! Не могу даже проголосовать за ваш ответ из-за моей плохой репутации, но в любом случае спасибо за наглядный пример. - person jigga; 13.02.2014
comment
Добро пожаловать :) Хотя для голосования может потребоваться больше представителей, вы можете «принять» ответ - person tasel; 14.02.2014
comment
Вместо небезопасного приведения NavigationHandler вы можете вызвать FacesContext.getCurrentInstance().getApplication().getNavigationHandler().handleNavigation(FacesContext.getCurrentInstance(), null, target), который эффективно делает то же самое. - person czerny; 09.03.2015