2017-01-27 12 views
2

dataTableと関連付けられたコンテキストメニューをバッキングBeanに作成しましたが、rowSelectイベントリスナーのコンフィグレーション方法がわかりません。dataTableのrowSelectイベントリスナーをプログラムでコンフィグレーションする方法

DataTable table = (DataTable) application.createComponent(DataTable.COMPONENT_TYPE); 
table.setValue(model); 
table.setSelectionMode("single"); 
table.setVar("item"); 
table.setId("tableId"); 
       : 

    ContextMenu ctxMenu = new ContextMenu(); 
    ctxMenu.setFor("tableId"); 

    DynamicMenuModel ctxModel = new DynamicMenuModel(); 

    ctxMenu.setModel(ctxModel); 

    rightCenterPanel.getChildren().add(ctxMenu); 
    rightCenterPanel.getChildren().add(table); 

    RequestContext.getCurrentInstance().update(TreeManagedBean.rightCenterForm); 

私はバッキングBeanに追加することができ、次の同等を探しています:

<p:ajax event="rowSelect" listener="#{myBean.selectItem}"/> 

また、それは、シングルとダブルのマウスクリックのイベントリスナーを追加することが可能であるここでは、コードの一部ですxhtmlファイルに「< p:ajaxイベント」を追加せずにバッキングBeanのdataTableを使用していますか?

+0

1質問ごとにお願いします。_ "xhtmlファイルに" Kukeltje

答えて

2

私はバッキングBeanに追加することができ、次の同等を探しています:このような

<p:ajax event="rowSelect" listener="#{agentBean.selectItem}"/> 

使用AjaxBehavior

import javax.el.ExpressionFactory; 
import javax.el.MethodExpression; 
import org.primefaces.behavior.ajax.AjaxBehavior; 
import org.primefaces.behavior.ajax.AjaxBehaviorListenerImpl; 

final FacesContext fc = FacesContext.getCurrentInstance(); 
final ExpressionFactory ef = application.getExpressionFactory(); 
final MethodExpression me = ef.createMethodExpression(fc.getELContext(), 
    "#{agentBean.selectItem}", String.class, new Class[0]); 
final MethodExpression meArg = ef.createMethodExpression(fc.getELContext(), 
    "#{agentBean.selectItem}", String.class, new Class[]{SelectEvent.class}); 
final AjaxBehavior ajaxBehavior = new AjaxBehavior(); 
ajaxBehavior.addAjaxBehaviorListener(new AjaxBehaviorListenerImpl(me, meArg)); 
dt.addClientBehavior("rowSelect", ajaxBehavior); 

を提供イベントハンドラあなたのagentBeanクラスのメソッド:

テーブル行が選択されたときに呼び出されます。それは

イベントrowSelect仕組み

は、DataTableの上AjaxBehaviorにリンクされます。 AjaxBehaviorは、agentBean.selectItemイベントハンドラメソッドを呼び出すように構成されたMethodExpressionを持つリスナを登録します。

+0

ありがとうございますが、rowSelectリスナーが呼び出されていません: 'FacesContext fc = FacesContext.getCurrentInstance(); \t \t ExpressionFactory ef = application.getExpressionFactory(); \t \t ELContext elc = fc.getELContext(); MethodExpression me = ef.createMethodExpression(elc、 \t \t \t "#{agentBean.onRowSelect}"、String.class、new Class [0]); \t \t AjaxBehavior ajaxBehavior = new AjaxBehavior(); \t \t ajaxBehavior.addAjaxBehaviorListener(new AjaxBehaviorListenerImpl(me、null)); \t \t table.addClientBehavior( "rowSelect"、ajaxBehavior); public void onRowSelect(SelectEvent event){ //出力メッセージ } ' – amah

+0

私はあなたが意味することを理解していません。あなたの環境に引数myBean.selectItemを採用していますか? – JanPl

+0

行が選択されたときに呼び出される関数として「#{agentBean.onRowSelect}」が使用されるようにコードを少し修正しました。 MethodExpression me = ef。createMethodExpression(elc、 "#{agentBean.onRowSelect}"、String.class、新しいクラス[0]); table.addClientBehavior( "rowSelect"、ajaxBehavior); – amah

関連する問題