2016-12-15 122 views
1

右鍵單擊後,我在我的項目上下文菜單中創建了該值。菜單模型是用Java創建的。在XHTML中,我只有:在上下文菜單中右鍵單擊後獲取值PrimeFaces

<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

您是否嘗試添加''給你的palenMenu?!? –

+0

@YagamiLight當我嘗試這個時,我有錯誤:'無法將行爲附加到非ClientBehaviorHolder父'的 – DanteVoronoi

+0

這是很好的請求等待一秒鐘,我會提供一個答案,並嘗試解釋它 –

回答

1

要執行類似的東西,你首先需要讓你的文本菜單裏面的元素和一定有東西已識別數據(信息)

讓我們來看看這個例子

第一個例子:

<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是commente與兩個例子

+0

@DanteVoronoi等待,我會改善我的回答 –

+0

所以在面板菜單中做到這一點是不可能的? – DanteVoronoi

+0

@DanteVoronoi我想給這個問題的答案這就是爲什麼我說「等我會改善我的答案」 –

3

p:contextMenubeforeShow屬性,可以用來射擊一個客戶端邊JavaScript功能(可以在文檔中閱讀)。

它也有一個targetFilter,只能觸發'for'中的某些元素。如果你給你的形式明確的ID(如myForm的),你可以把它火只在菜單項鍊接:

<p:contextMenu for="menu" targetFilter="#myForm\\:menu .ui-menuitem-link" beforeShow="..."> 

你可以如做一個console.log(this)console.log(event),並從那些檢查你需要和訪問,這是很多。

contextMenu上下文中的'this'有一個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的真正價值。

因爲我不知道你的隱藏字段在哪裏,所以我不能將其納入我的答案。對不起

+0

我嘗試隱藏輸入的方法,它的工作很好。感謝幫助。 – DanteVoronoi

+0

你說我的答案有幫助嗎?或者你使用你的jQuery?如果答案有幫助,我們鼓勵你「接受」它。如果它幫助很好,你甚至可以加快它的速度。如果它根本沒有幫助,你可以減少答案。其他後來才知道這個答案並不好 – Kukeltje

+0

我用我的'JQuery'但我認爲你的答案是好的,可能是人誰搜索這個問題的解決有所幫助。 – DanteVoronoi

相關問題