【发布时间】:2013-02-13 17:23:14
【问题描述】:
我用带有模型的巨型菜单更改了我的静态菜单文件 (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());
【问题讨论】:
-
你有没有试过打电话给
anItem.setTransient(true)?这对我有用。
标签: jsf primefaces