3

誰かが何か考えを持っていますか、なぜこのコードが機能するのですか?

<h:outputText value="#{allocations[0].policyNumber}" />

このコードは機能します:

<c:forEach var="i" begin="1" end="5">
    <h:outputText value="aaa"/>
</c:forEach>

しかし、このコードは機能しません(GUIには何も表示されません):

<c:forEach var="allocation" items="#{allocations}" >
    <h:outputText value="aaa"/>
</c:forEach>

名前空間「http://java.sun.com/jstl/core」を使用しています。割り当てはJavaのコレクションです。私は考えられるすべてのことを試しましたが、次に何を試すべきかわかりません。

4

1 に答える 1

5

#{}表記はユニファイドELからのものです。これはJSTL1.2でのみサポートされています。JSTL名前空間URIを、JSFを使用しているという事実と組み合わせて使用​​すると、実際にJSTL1.1を使用していることがわかります。

2つのオプションがあります:

  1. ${}代わりに表記を使用してください。Beanがすでにスコープに存在することのみを保証する必要があります。つまり、この${}表記はマネージドBeanを自動作成しません(自動作成します#{})。

  2. JSTL1.2にアップグレードします。ダウンロードリンクと詳細は、JSTLwikiページにあります。XML名前空間URIをに変更することを忘れないでくださいhttp://java.sun.com/jsp/jstl/core

言うまでもなく、オプション2が推奨されます。${}JSFページを禁止する必要があります。

参照:


まったく別の方法として、の<ui:repeat>代わりにFacelets独自のものを使用することもできます<c:forEach>。ただし、Faceletsがビューのレンダリング時に実行されることとJSTLがビューのビルド時に実行されることの主な違いを理解する必要があります。JSF2 FaceletsのJSTLも参照してください...意味がありますか?

于 2012-11-02T14:25:12.687 に答える