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

时间:2017-01-27 10:18:41

标签: jsf primefaces datatable

我在backing bean中创建了一个dataTable和相关的上下文菜单,但不知道如何配置rowSelect事件监听器。以下是代码的一部分:

Error: A.java:9: error: ')' expected
          A.B innerObj=outerObj.new A.B();
                                     ^

我正在寻找可以在支持bean中添加的以下内容:

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中为dataTable添加单点击和双点击事件监听器,而无需添加任何" < p:ajax事件"在xhtml文件中?

1 个答案:

答案 0 :(得分: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链接到DataTable上的AjaxBehavior。 AjaxBehavior注册一个Listener,它配置了MethodExpression来调用agentBean.selectItem事件处理程序方法。