Jsf 2 在p:menuitem上编程使用PrettyFaces操作

Jsf 2 在p:menuitem上编程使用PrettyFaces操作,jsf-2,primefaces,prettyfaces,Jsf 2,Primefaces,Prettyfaces,我有一个PrimeFaces 6.0菜单项连接到PrettyFaces 3.3.3,如下所示: <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"> <

我有一个PrimeFaces 6.0菜单项连接到PrettyFaces 3.3.3,如下所示:

<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>
DefaultMenuItem上没有setAction方法

我试过这些:

menuItem.seturlpreatty:page-使用pretty:page作为URL,浏览器抱怨地址无法理解 menuItem.setHrefpretty:第页-与setUrl一样 setCommandpretty:page;获取服务器日志中输入字符串的NumberFormatException: menuItem.setOutcomepretty:page;获取一个带有尾随?com.ocpsoft.mappingId=page的URL,因此PrettyFaces似乎没有发挥其神奇作用,反过来,页面崩溃,因为它没有按照预期映射/注入其参数。 如何从代码设置操作

使用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)
...

如果其他人遇到此问题:请在菜单项中使用命令,并确保在整个菜单上调用GenerateUniqueId:

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

如果其他人遇到此问题:请在菜单项中使用命令,并确保在整个菜单上调用GenerateUniqueId:

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

您是否尝试过:org.primefaces.component.menuitem.UIMenuItem。它肯定有setAction。在p:commandLink中可以这样做吗?@Kukeltje是的,至少当我把它添加到页面上时可以。我调整了问题。但是这也适用于菜单。是的,但是在p:commandLink的代码中设置它有效吗?您可以调试执行menuItem时发生的情况;NFE发生在哪里?为什么SetOutput错误?似乎有什么东西添加了尾随部分,而不是PrimeFaces。@Kukeltje如果我在菜单项上使用setCommand,然后在返回它之前调用MenuModel上的GenerateUniqueId,代码会神奇地工作。您是否尝试过:org.PrimeFaces.component.menuitem.UIMenuItem。它肯定有setAction。在p:commandLink中可以这样做吗?@Kukeltje是的,至少当我把它添加到页面上时可以。我调整了问题。但是这也适用于菜单。是的,但是在p:commandLink的代码中设置它有效吗?您可以调试执行menuItem时发生的情况;NFE发生在哪里?为什么SetOutput错误?似乎有什么东西添加了尾随部分,而不是PrimeFaces。@Kukeltje如果我在菜单项上使用setCommand,然后在返回它之前调用MenuModel上的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;
}