简体   繁体   English

如何以编程方式为 dataTable 配置 rowSelect 事件侦听器

[英]How to programmatically configure rowSelect event listener for dataTable

I have created a dataTable and associated context menu in backing bean but don't know how to configure rowSelect event listener.我在支持 bean 中创建了一个 dataTable 和关联的上下文菜单,但不知道如何配置 rowSelect 事件侦听器。 Here is part of the code:这是代码的一部分:

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

I am looking for equivalent of the following which can be added in backing bean:我正在寻找可以添加到支持 bean 中的以下等效项:

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

Also is it possible to add single and double mouse click event listeners for dataTable in the backing bean without adding any " < p:ajax event" in the xhtml file?是否可以在支持 bean 中为 dataTable 添加单击和双击事件侦听器而不在 xhtml 文件中添加任何“< p:ajax 事件”?

I am looking for equivalent of the following which can be added in backing bean:我正在寻找可以添加到支持 bean 中的以下等效项:

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

Use AjaxBehavior like this:像这样使用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);

Provide an event handler method in your agentBean class:在您的 agentBean 类中提供一个事件处理程序方法:

public void selectItem(final SelectEvent event) {}

It will be called when a table row gets selected.当一个表格行被选中时,它会被调用。

How it works这个怎么运作

The event rowSelect gets linked to the AjaxBehavior on the DataTable.事件rowSelect被链接到 DataTable 上的 AjaxBehavior。 The AjaxBehavior registers a Listener which has the MethodExpression configured to call the agentBean.selectItem event handler method. AjaxBehavior 注册了一个侦听器,该侦听器具有配置为调用agentBean.selectItem事件处理程序方法的 MethodExpression。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM