右键单击上下文菜单PrimeFaces后获取值

时间:2016-12-15 11:50:33

标签: javascript jquery jsf primefaces

右键单击后,我在项目上下文菜单中创建。菜单模型是用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的情况下有更好的解决方案。

2 个答案:

答案 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这个东西与两个例子

一致