静的メニュー ファイル (header.xhtml) をモデル付きのメガ メニューに変更しました。このような:
<p:megaMenu model="#{menuController.megaModel}" autoDisplay="false" styleClass="menu-bar" >
</p:megaMenu>
これまでのところ、うまく機能し、期待どおりに構築されています。問題は、私のフォーム ページで、検証が 2 回目に失敗したときです...次のエラーが発生します。
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を使用しています)。したがって、考えられる解決策の 1 つは、JSF インプを My Faces に変更することです。私はそれを試しましたが、私の構造にバグがありました (複合コンポーネントが機能しなくなり、dynaForm も機能しなくなりました)。
いくつかの回避策を試しましたが、成功しませんでした。これは私が試したものです: Overriding AbstractMenu and Marlon Patrick's solution (PT-BR)。
単に機能しません =[
編集-> MenuItem の作成
MenuItem anItem = new MenuItem();
anItem.setOutcome(item.getOutcome());
anItem.setValue(item.getRotulo());
anItem.setIcon(item.getIcone());