次のようないくつかのタグを持つ単純な JSF ページがあります。
...
<h:form>
...
<h:panelGroup id="menuItem1" styleClass="topLevelMenu" layout="block"
rendered="#{MyBean.currentUser.menuAccessible}">
<h:outputText value="Menu 1"/>
</h:panelGroup>
<h:panelGroup id="menuItem2" styleClass="topLevelMenu" layout="block"
rendered="#{MyBean.currentUser.menuAccessible}">
<h:outputText value="Menu 2"/>
</h:panelGroup>
<h:panelGroup id="menuItem3" styleClass="topLevelMenu" layout="block"
rendered="#{MyBean.currentUser.menuAccessible}">
<h:outputText value="Menu 3"/>
</h:panelGroup>
...
</h:form>
...
レンダリングされた条件は「true」です (デバッガーで確認しました)。奇妙に思えるのは、2 番目と 3 番目の項目 (メニュー 2 とメニュー 3) だけが表示されることです。最初のものは、他の 2 つと同じ "レンダリング済み" の条件を持っているにもかかわらず、表示されません! 最初のものを render="true" に変更すると、正常に表示されます。
なぜこれが起こっているのでしょうか?私のページには、このように約 15 の panelGroups が配置されています (アプリケーションのメニュー項目を作成するためにそれらを使用しています)。
注: アプリケーションを JSF 1.2 から JSF 2.1 に移行しています。この変更を t:div (以前は正しく機能していました) から h:panelGroup layout="block"... に加えました。