Как выполнить переход на изменение значения в h: selectOneMenu? - PullRequest
3 голосов
/ 01 февраля 2011

Обычно я делаю что-то вроде ниже.Нажатие кнопки выполняет переход.

<!-- view -->
<h:form>
  <h:commandButton action="doit">
    <f:ajax render="@form"/>
  </h:commandButton>
</h:form>

<!-- flow -->
<transition on="doit">...</transition>

Как запустить переход при изменении значения в (например) h: selectOneMenu?

<h:form>
  <h:selectOneMenu value="#{selected}">
    <f:selectItems value="#{items}/>
    <f:ajax event="valueChange" render="@form" />
  </h:selectOneMenu>
</h:form>

Edit: Я думал о регистрации слушателя f: ajax и подготовке события webflow, но как использовать это событие ...?Кто-нибудь поможет?

<h:form>
  <h:selectOneMenu value="#{selected}">
    <f:selectItems value="#{items}/>
    <f:ajax event="valueChange" render="@form" listener="#{bean.changeListener}" />
  </h:selectOneMenu>
</h:form>

java:

import javax.faces.event.AjaxBehaviorEvent;
import org.springframework.webflow.execution.Event;

public class Bean {
     public void changeListener(AjaxBehaviorEvent event) {
         // prepare webflow event
         Event e = new Event(event.getSource(), "doit");
         // propagate this event... ???
     }
}

1 Ответ

4 голосов
/ 04 января 2012

У меня недавно была похожая проблема, и я обрабатывал события primefaces / richfaces в похожем стиле слушателя. Вот пример:

    public void changeListener(AjaxBehaviorEvent event) {  
    RequestContext requestContext = RequestContextHolder.getRequestContext();
    RequestControlContext rec = (RequestControlContext) requestContext;
    //place variables you need in next flow phase here; flash,application,session scope
    rec.getFlashScope().put("someVarIneedInNextFlow", varName);
    rec.handleEvent(new Event(this, "flow transition name here, i.e. next-stage"));
    return;
}

Это должно перейти к желаемому событию потока:)

...