0

私は 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 の重複エラーが引き続き発生します。

4

1 に答える 1

1

最善の解決策ではありませんが、迅速で汚い: に置き換えui:fragmentますf:subView

于 2014-02-28T16:13:29.603 に答える