我在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文件中?
答案 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
事件处理程序方法。