2016-07-28 64 views
1

我有一個PrimeFaces 6.0菜單項鉤住PrettyFaces 3.3.3這樣的:頁上使用PrettyFaces動作編程:菜單項

<h:form id="nav" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:prime="http://primefaces.org/ui"> 

<prime:panelMenu label="Menu"> 
    <prime:submenu label="SubMenu"> 
     <prime:menuitem value="page" action="pretty:page"/> 
    </prime:submenu> 
</prime:panelMenu> 
</h:form> 

這工作得很好。但是我怎樣才能在Java中構建菜單並實現相同?

本頁面

<prime:panelMenu model="#{bean.navMenu}" id="leftNavMenu"/> 

得到我預期的菜單結構,但我不知道如何設置每個菜單項的操作。

public MenuModel getNavMenu() { 
    MenuModel model = new DefaultMenuModel(); 
    DefaultSubMenu subMenu = new DefaultSubMenu("sub menu"); 
    DefaultMenuItem menuItem = new DefaultMenuItem("page"); 
    // something is missing here 
    subMenu.addElement(menuItem); 
    model.addElement(subMenu); 
    return model; 
} 

上有DefaultMenuItem沒有setAction方法。

我嘗試這些:

  • menuItem.setUrl("pretty:page"); ---使用pretty:page作爲URL和瀏覽器抱怨說,這個地址是不被理解(理解)
  • menuItem.setHref("pretty:page"); ---與setUrl
  • menuItem.setCommand("pretty:page");在服務器日誌中獲取NumberFormatException: For input string: ""
  • menuItem.setOutcome("pretty:page");獲取一個尾隨地址爲?com.ocpsoft.mappingId=page的URL,因此PrettyFaces似乎沒有做它的魔法師c,然後頁面崩潰,因爲它沒有像預期的那樣得到它的參數映射/注入。

如何從代碼設置動作?

使用set命令獲取該堆棧跟蹤的服務器日誌:

[2016-07-28T14:55:42.198-0500] [glassfish 4.1] [SEVERE] [] [javax.enterprise.resource.webcontainer.jsf.context] [tid: _ThreadID=27 _ThreadName=http-listener-1(2)] [timeMillis: 1469735742198] [levelValue: 1000] [[ 
    java.lang.NumberFormatException: For input string: "" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:592) 
    at java.lang.Integer.parseInt(Integer.java:615) 
    at org.primefaces.component.menu.BaseMenuRenderer.findMenuitem(BaseMenuRenderer.java:89) 
    at org.primefaces.component.menu.BaseMenuRenderer.decode(BaseMenuRenderer.java:67) 
    at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:831) 
... 
+0

你試過了:'org.primefaces.component.menuitem.UIMenuItem'。它肯定有'setAction'。 –

+0

它是否在'p:commandLink'中執行此操作? – Kukeltje

+0

@Kukeltje是的,它至少在我將它添加到頁面的時候。 (我調整了這個問題。)但是這對菜單也適用。 – Robert

回答

3

如果任何人遇到這樣的問題:在菜單項目使用command,並確保整個菜單上呼籲generateUniqueIds

public MenuModel getNavMenu() { 
    MenuModel model = new DefaultMenuModel(); 
    DefaultSubMenu subMenu = new DefaultSubMenu("sub menu"); 
    DefaultMenuItem menuItem = new DefaultMenuItem("page"); 
    menuItem.setCommand("pretty:page"); 
    subMenu.addElement(menuItem); 
    model.addElement(subMenu); 
    model.generateUniqueIds(); 
    return model; 
}