2011-02-01 2 views
3

Обычно я делаю что-то вроде ниже. Нажатие кнопки выполняет переход.Как выполнить переход при изменении значения в h: selectOneMenu?

<!-- 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... ??? 
    } 
} 

ответ

4

Я недавно была аналогичная проблема, и обрабатывать 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; 
} 

Это должно перейти в зависимости от того, поток событий вы хотите :)

Смежные вопросы