[英]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.