私は JSF の問題に直面しています。すべてのページでレンダリングされるフラグメントがあり、テーブルの最新のエントリ (〜 10 項目) を表示します。そして、すべてのエントリを一覧表示するページで再利用したいと考えています。
要素のすべてのページのバージョンがこのページに表示されるのを防ぐために、レンダリングされたルールを配置しましたが、それでもうまくいきません。「ビューに重複した ID が見つかりました」というエラーが表示されます。問題は、実際にレンダリングされる ID を検証する前に、JSF プロセッサが ID を検証するという事実にあるようです。
参考までに、リクエスト URI の末尾を使用して、レンダリングが True か False かを判断しています。
あ、c:ifも使ってみたけどだめでした。
編集:
リクエストされたサンプルコード...
私はこのxhtmlフラグメント( "tableInclude.xhtml")を持っています:
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
<ui:fragment>
<p:dataTable var="item" value="#{bean.items}"
emptyMessage="#{msg['table.empty']}"
widgetVar="table" id="listItems" styleClass="tableItems">
<p:column styleClass="span1" style="text-align: center;">
<f:facet name="header">
<i class='fa-icon-picture'/>
</f:facet>
<p:commandLink action="#{bean.itemSelected(item)}" value="#{item.name}"/>
</p:column>
</p:dataTable>
</ui:fragment>
</ui:composition>
次に、すべてのページでこれを実行します:
<ui:include src="./tableInclude.xhtml">
私はこれをやろうとしました:
<ui:fragment rendered="#{request.requestURI != '/context/don't_render_here.xhtml'}">
<ui:include src="./tableInclude.xhtml">
</ui:fragment>
しかし、「don't_render_here.xhtml」ページにアクセスすると、ID の重複エラーが引き続き発生します。