3

通常、私は以下のようなことをします。ボタンをクリックすると、トランジションが実行されます。

<!-- 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>


編集: リスナーを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

1 に答える 1

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

それはあなたが望むフローイベントに移行するはずです:)

于 2012-01-04T15:53:54.470 に答える