0

OK、リスナーを呼び出すシンプルなメニューがたくさんあります

<p:selectManyMenu style="width: 100%;" id="cmbsectores" valueChangeListener="#{mbcompletado.removeItem}">                                            
      <f:selectItems value="#{mbcompletado.sectores}"/>    
      <f:ajax update="@this"/>
</p:selectManyMenu>

ValueChangeEvent パスをパラメータとして使用して、どの項目が選択されたかを検出する方法を探しています?? これで、ビジネス ロジックを使用できるようになります。

ajax タグを使用する必要がありますか? 私が使用しているフレームワークであるprimefaceでitemSelectイベントを見つけましたが、チャートコンポーネントでしか機能しません!

前もって感謝します

4

2 に答える 2

1

すでに PrimeFaces を使用しているため、p:ajax代わりにf:ajax. はeventすでに適切なイベント (valueChanged) に設定されています。

属性の選択された値を検出するには、次selectManyMenuvalueことが必要です。

<p:selectManyMenu style="width: 100%;" id="cmbsectores"
    value="#{mbcompletado.selectedSectores}">                                            
    <f:selectItems value="#{mbcompletado.sectores}"/>    
    <p:ajax/>
</p:selectManyMenu>

valueChangeListener リスナーを完全に削除できます。

より完全な例については、SelectManyMenuを参照してください。

編集:

バッキング Bean では、mbcompletado.selectedSectoresのような同じタイプのコレクションを指す必要がありますmbcompletado.sectores。たとえば、 yoursectoresListof のTypeA場合、同じ型 ( )selectedSectoresでもある必要があります。ListTypeA

同様のバッキング Bean 構造が、次の例のSelectManyCheckboxにあります。

于 2012-11-13T20:07:25.977 に答える
0

代わりに<f:ajax listener>(またはこの場合はより良い) メソッドが必要です。<p:ajax listener>ValueChangeListenerまったく異なる目的を果たします。新しい値だけに関心がある場合ではなく、古い値と新しい値の両方に本当に関心がある場合にのみ使用してください。

例えば

<p:selectManyMenu value="#{bean.selectedSectors>
    <f:selectItems value="#{bean.availableSectors}"/>    
    <p:ajax listener="#{bean.selectedSectorsChanged}" />
</p:selectManyMenu>

private List<String> selectedSectors;
private List<String> availableSectors;

public void selectedSectorsChanged() {
    System.out.println("Selected sectors are: " + selectedSectors); // Look, JSF has already set it.
    // ...
}

以下も参照してください。

于 2012-11-13T23:30:07.187 に答える