我用带有模型的巨型菜单更改了我的静态菜单文件(header.xhtml)。像这样:
<p:megaMenu model="#{menuController.megaModel}" autoDisplay="false" styleClass="menu-bar" >
</p:megaMenu>
到目前为止一切都很好,它工作得很好,就像我预期的那样建造。问题是,在我的表单页面上,当验证第二次失败时......我收到此错误:
javax.faces.FacesException: Cannot remove the same component twice: j_idt15:j_id2 com.sun.faces.context.StateContext$AddRemoveListener.handleAddRemoveWithAutoPrune(StateContext.java:493)
com.sun.faces.context.StateContext$AddRemoveListener.handleRemove(StateContext.java:372)
查看生成的 HTML,我找不到这个字符串“j_idt15:j_id2”,但我可以找到:
<div id="j_idt14:j_idt15" class="ui-menu ui-menubar ui-megamenu ui-widget ui-widget-content ui-corner-all ui-helper-clearfix menu-bar" role="menubar">
还有这个:
所以...我真的不明白。我的 MenuController 是一个 sessionBean:
@Component
@Scope("session")
public class MenuController implements Serializable {
@PostConstruct
public void init(){
todosModulos = moduloService.findAll();
modulosAcesso = extrairModulos();
createMegaMenu();
}
...所以..一些注意事项:
我发现这个错误发生在 2.1.9 以上的 Mojarra 版本上。(我使用的是 2.1.10)。因此,一种可能的解决方案是将 JSF imp 更改为 My Faces。我试过了,但它破坏了我的结构(我的复合组件停止工作并且 dynaForm 也停止了)。
我尝试了一些解决方法,但没有成功。这就是我尝试过的: Overriding AbstractMenu和Marlon Patrick's solution (PT-BR)。
根本行不通=[
编辑-> 创建菜单项
MenuItem anItem = new MenuItem();
anItem.setOutcome(item.getOutcome());
anItem.setValue(item.getRotulo());
anItem.setIcon(item.getIcone());