2017-01-27 50 views
2

我已經在支持bean中創建了dataTable和關聯的上下文菜單,但不知道如何配置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}"/> 

也是它可以添加單,雙鼠標點擊事件監聽器對於backing bean中的dataTable,而不在xhtml文件中添加任何「< p:ajax事件」?

+0

1每個問題的問題,請... _「還有可能在後臺bean中爲dataTable添加單鼠標和雙鼠標點擊事件偵聽器,而無需在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類中的方法:

public void selectItem(final SelectEvent event) {} 

當表格行被選中時,它將被調用。

它是如何工作

事件rowSelect被鏈接到AjaxBehavior在數據表。 AjaxBehavior註冊一個Listener,該Listener的MethodExpression被配置爲調用事件處理函數的方法agentBean.selectItem

+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,new Class [0]); table.addClientBehavior(「rowSelect」,ajaxBehavior); – amah

相關問題