很抱歉,这篇文章太长了,但是目前我们还不清楚,所以我想尽可能多的发布一些细节。
我们在internet 9上遇到了PrimeFaces2.2菜单的问题。我们使用eclipse开发web应用程序,服务器是tomcat版本6.0.18,由于客户需求无法升级。我们在war中包含了所有必需的库,这也是客户的需求。下面是我们在应用程序web/lib文件夹中包含的(详尽的)库列表:
到目前为止,我们已经在三个不同的地区进行了测试:
该菜单包含三个根菜单“新请求”、“工作正在进行”和“管理”。
对于1.和2. (涉及ie9),第二个菜单“工作正在进行”消失,并在导航过程中恢复(单击其他菜单,单击重定向按钮,.),其他两个菜单仍然可见。我们无法找到一条规则,也无法系统地复制这种行为。正如您从下面的代码中看到的,我们对子菜单设置器进行了注释,以检查没有什么编程错误将其设置为不同的东西。
对于Firefox,它永远不会发生,它可以很好地工作。最后,只有在案例2 (ie9 + https in )中,我们有时会遇到servlet呈现异常,到目前为止,我们已经得到了以下内容:
行为怪异的素数面菜单是由代码生成的,它的后台bean有一个会话范围,相关代码如下所示。
这是图书馆的问题吗?浏览器问题?我们的应用程序的错误?有人能建议一些测试来缩小问题,或者一个工具来获得一些提示吗?
主要的容器页面是:
<h:body>
<h:form id="masterForm">
<p:growl id="msg" life="10000" showDetail="true" sticky="false" />
</h:form>
<p:layout fullPage="true">
<p:layoutUnit position="top" height="90" id="layUnitNorth"
resizable="false" closable="false" collapsible="false"
scrollable="null" zindex="199">
<ui:insert name="header">
<div id="userInfoPanel">
<ui:include src="userinfo.xhtml" />
</div>
<ui:include src="menu.xhtml" />
</ui:insert>
</p:layoutUnit>
<p:layoutUnit position="center" scrollable="true">
<ui:insert name="content">
<p:layoutUnit position="center">
</p:layoutUnit>
</ui:insert>
</p:layoutUnit>
</p:layout>
菜单页是:
<ui:composition>
<h:form id="menuForm">
<p:menubar effect="slide" styleClass="menuCustom">
<p:submenu label="New" >
<p:menuitem value="new requests" onclick="navigateTo('Richieste/ListaRichieste.xhtml?canale=0');" />
<p:menuitem value="channel 1" onclick="navigateTo('Richieste/ListaRichieste.xhtml?canale=1');" />
<p:menuitem value="channel 2" onclick="navigateTo('Richieste/ListaRichieste.xhtml?canale=2');" />
<p:menuitem value="channel 3" onclick="navigateTo('Richieste/ListaRichieste.xhtml?canale=3');" />
</p:submenu>
<p:submenu label="work in progress"
binding="#{menuCtrl.boxSubMenu}">
</p:submenu>
<p:submenu label="administration" rendered="#{userInfo.admin}">
<p:menuitem value="Customers" url="#" />
<p:menuitem value="Templates" url="#" />
<p:menuitem value="Digital signature" url="#" />
</p:submenu>
</p:menubar>
</h:form>
menuCtrl是一个会话bean:
public class MenuCtrl {
final static Logger log = Logger.getLogger(MenuCtrl.class);
private Submenu boxSubMenu;
public void setBoxSubMenu(Submenu boxSubMenu) {
//this.boxSubMenu = boxSubMenu;
}
public Submenu getBoxSubMenu() {
return boxSubMenu;
}
public MenuCtrl() {
try {
boxSubMenu = BoxMenuHelper.getBoxSubMenu();
} catch (Exception ex) {
String msg = "Impossibile creare il menu di navigazione nei box";
log.error(msg, ex);
showMessage(FacesMessage.SEVERITY_ERROR, msg);
}
}}
子菜单工厂方法:
public static Submenu getBoxSubMenu() throws Exception{
CatalogazioneRepository br = new CatalogazioneRepository();
Submenu sm = new Submenu();
try {
for (Catalogazione box : br.getOnlyBoxes()) {
MenuItem item = new MenuItem();
item.setId("boxMenuItem" + box.getId());
item.setValue(box.getNome());
item.setOnclick("navigateTo('Box/ListaRichieste.xhtml?box="+ box.getId() +"');");
sm.getChildren().add(item);
}
return sm;
} catch (Exception ex) {
String msg = "Errore durante la creazione del menu di navigazione nei box";
log.error(msg, ex);
throw new Exception(msg, ex);
}
}发布于 2012-01-20 11:46:36
我找到了这个Primefaces论坛帖子
他们(optimus.prime -- PrimeFaces的创建者和论坛的一位非常高级的用户)声称,您应该将菜单项的构建器放在请求范围内,以避免奇怪的行为。
发布于 2013-03-29 18:20:36
这篇文章有点旧,但是,如果您有这样的用法,则更喜欢这些属性;
下面的使用可能只适用于客户端操作中非常特殊的java脚本需要:
<p:menuitem value="new requests" onclick="navigateTo('Richieste/ListaRichieste.xhtml?canale=0');" />更喜欢以下选项:
<p:menuitem value="new requests" url="Richieste/ListaRichieste.xhtml?canale=0"/>或
<p:menuitem value="new requests" outcome="Richieste/ListaRichieste?canale=0" />https://stackoverflow.com/questions/8924955
复制相似问题