在p:menuitem上以编程方式使用PrettyFaces动作

时间:2016-07-28 17:22:27

标签: jsf-2 primefaces prettyfaces

我有一个与PrettyFaces 3.3.3挂钩的PrimeFaces 6.0菜单项:

<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;
}

setAction上没有DefaultMenuItem方法。

我试过这些:

  • menuItem.setUrl("pretty:page"); ---使用pretty:page作为网址,浏览器抱怨地址未被理解(可以理解)
  • menuItem.setHref("pretty:page"); ---与setUrl
  • 一样
  • menuItem.setCommand("pretty:page");在服务器日志中获得NumberFormatException: For input string: ""
  • menuItem.setOutcome("pretty:page");获取一个尾随?com.ocpsoft.mappingId=page的网址,因此PrettyFaces似乎不会发挥其魔力,反过来页面崩溃,因为它没有按预期方式映射/注入其参数。 / LI>

如何从代码设置操作?

使用setCommand在服务器日志中获取此堆栈跟踪:

[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)
...

1 个答案:

答案 0 :(得分: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;
}
相关问题