JSF コンポーネントの属性で EL を使用できますが、JSF コンポーネント ツリーが構築される間、ビューの構築時id
に EL 変数を使用できる必要があります。ただし、 はビューのレンダリング時に実行されますが、HTML 出力は JSF コンポーネント ツリーに基づいて生成されます。ビューのビルド時には利用できず、エラーを完全に説明するものに評価されます。それが機能するのは、ビューのレンダリング時に実行されるためです。<ui:repeat>
<ui:repeat var>
#{class2.name}
null
<h:outputText>
ビューのビルド時に実行<ui:repeat>
されるに置き換えると、意図したとおりに機能します。<c:forEach>
つまり、は JSF コンポーネント ツリー内に<c:forEach>
物理的に複数の<h:form>
コンポーネントを生成し、それぞれが独自の HTML 出力を個別に生成します (<ui:repeat>
まったく同じ<h:form>
コンポーネントを何度も再利用して HTML 出力を生成する とは対照的です)。
<c:forEach var="class2" items="#{bean.list}" varStatus="status">
<h:form id="#{class2.name}">
<h:outputText value="#{class2.name}" />
</h:form>
</c:forEach>
しかし、なぜそれをする必要があるのか 本当に疑問に思います。通常、コンポーネント ID を動的に割り当てる必要はありません。JSF は ID の一意性を保証します。以下の例では、
<ui:repeat var="class2" value="#{bean.list}" varStatus="status">
<h:form id="form">
<h:outputText value="#{class2.name}" />
</h:form>
</ui:repeat>
の反復インデックスが接尾辞として付けられた一意の ID を持つ複数の形式になり<ui:repeat>
ます。実際に#{class2.name}
JavaScript/jQueryの目的で使用する必要がある場合(これが正しい解決策であると考えた質問で、具体的な機能要件をどこにも述べていないため、単なる推測です)、単純なバニラでラップするだけですHTML 要素:
<ui:repeat var="class2" value="#{bean.list}" varStatus="status">
<div id="#{class2.name}">
<h:form id="form">
<h:outputText value="#{class2.name}" />
</h:form>
</div>
</ui:repeat>
または、CSS セレクターを介して選択できる JSF コンポーネントのスタイル クラスとして設定します。
<ui:repeat var="class2" value="#{bean.list}" varStatus="status">
<h:form id="form" styleClass="#{class2.name}">
<h:outputText value="#{class2.name}" />
</h:form>
</ui:repeat>
以下も参照してください。