2011-02-01 3 views
3

보통 나는 아래와 같이합니다. 버튼을 클릭하면 트랜지션이 실행됩니다. h : selectOneMenu에서 값 변경시 전환을 실행하는 방법?

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

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

방법에 변화 값에 전환을 발사 시간 (예를 들어) : selectOneMenu?

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


편집 : 나는 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> 

자바 :

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; 
} 

관련 문제