右键单击后,我在项目上下文菜单中创建。菜单模型是用Java创建的。在XHTML中我只有:
<p:panelMenu style="width:250px" id="menu"
model="#{menuBean.menuModel}" stateful="false">
</p:panelMenu>
<p:contextMenu id="context" for="menu"
model="#{menuBean.contextMenuModel}" style="width:300px">
当我点击鼠标右键单击时,我希望从项目中获取值或id。 在PrimeFaces中如何做到这一点?我找到了仅使用数据表的答案。我在项目JSF和PrimeFaces中使用过。
编辑: 我写了这样简单的jQuery:
$(".ui-menuitem-link").contextmenu(function() {
document.getElementById("hiddenField").value = $(this).text();
});
它返回所选项目的名称,但也许有人在没有jQuery的情况下有更好的解决方案。
答案 0 :(得分:3)
p:contextMenu
具有beforeShow
属性,可用于触发客户端javascript函数(可以在文档中阅读)。
它还有一个targetFilter,只触发&#39; for&#39;中的某些元素。如果您为表单提供了明确的ID(例如myForm),则只能在菜单项链接上触发:
<p:contextMenu for="menu" targetFilter="#myForm\\:menu .ui-menuitem-link" beforeShow="...">
你可以,例如做一个console.log(this)
或console.log(event)
并从那些检查你需要和有权访问,这是很多。
&#39;这&#39;在contextMenu的上下文中有一个jqTarget属性,它将为您获取为其触发contextMenu的html组件(菜单),但您也可以使用具有特定菜单项目标的事件对象。
<p:contextMenu for="menu" targetFilter="#myForm\\:menu .ui-menuitem-link" beforeShow="console.log(this); console.log(event)">
会给你一个类似
的输出Object { _super: undefined, cfg: Object, id: "myForm:j_idt118", jqId: "#myForm\:j_idt118", jq: Object, widgetVar: "widget_myForm_j_idt118", keyboardTarget: Object, links: Object, rootLinks: Object, jqTargetId: "#myForm\:menu", 1 meer… } panelMenu.xhtml:655:174
Object { originalEvent: contextmenu, type: "contextmenu", isDefaultPrevented: returnFalse(), target: <a.ui-menuitem-link.ui-corner-all.ui-state-hover>, currentTarget: <div#myForm:menu.ui-panelmenu.ui-widget>, relatedTarget: null, timeStamp: 103942249, jQuery31004030775514688282: true, delegateTarget: HTMLDocument → panelMenu.xhtml, handleObj: Object, 1 meer… }
所以你需要javascript来获得你需要的真正价值,你只需要不需要自定义jquery。
由于我不知道你隐藏的领域在哪里,我不能在我的答案中加入。遗憾
答案 1 :(得分:1)
要执行类似的操作,首先需要在元素中创建contextMenu,并且必须有一些东西来识别您的数据(信息)
让我们看一下这个例子
第一个示例: 树
<p:tree id="tree" value="#{ManagedBean.treeConstruct}" var="node" ...>
<p:ajax event="contextMenu" listener="#{ManagedBean.onContextMenu}" />
...
</p:tree>
在您将找到的managedBean中
public void onContextMenu(NodeSelectEvent event) {
System.out.println(" event " + event.getTreeNode().getRowKey());
}
您可以看到我们获取所选元素的方式,这种方式由Primefaces文档提供。
第二个示例: DataGrid
<p:dataGrid var="car" ...>
<p:contextMenu for="element" id="test" >
<p:menuitem icon="ui-icon-plus" ... >
<f:setPropertyActionListener value="#{car}" target="#{ManagedBean.nodeSelected}" />
</p:menuitem>
</p:contextMenu>
</p:dataGrid>
你看到Var
这个东西与两个例子