У меня есть пункт меню а PrimeFaces 6,0 зацепил PrettyFaces 3.3.3, как это:Использование PrettyFaces действия на р программно: MENUITEM
<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
как URL, и браузер сообщает, что адрес не был понят (по понятным причинам)menuItem.setHref("pretty:page");
--- как и сsetUrl
menuItem.setCommand("pretty:page");
получаетNumberFormatException: For input string: ""
в журнале сервераmenuItem.setOutcome("pretty:page");
получает URL-адрес с завершающим?com.ocpsoft.mappingId=page
, поэтому PrettyFaces, похоже, не делает своего волшебника c, и, в свою очередь, страница вылетает из-за того, что она не отображает или вводит ее параметры, как ожидалось.
Как я могу установить действие из кода?
Использование 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)
...
Вы пытались: 'org.primefaces.component.menuitem.UIMenuItem'. У этого есть 'setAction' точно. –
Выполняет ли это это в 'p: commandLink'? – Kukeltje
@Kukeltje Да, это, по крайней мере, когда я добавляю его прямо на страницу. (Я задал вопрос.) Но тогда это работает и для меню. – Robert