3

HashMapをループして、その値を画面に出力するのに問題があります。誰かが私のコードを再確認して、私が間違っていることを確認できますか?私は何も悪いことを見つけることができないようですが、何かがあるに違いありません。

サーブレットでは、リクエストに次のものを追加しています。

Map<String, String> facetValues = new HashMap<String, String>();
// Filling the map
req.setAttribute(facetField.getName(), facetValues);

あるケースでは、「facetField.getName()」は「discipline」と評価されます。だから私のページには次のものがあります:

<ui:repeat value="${requestScope.discipline}" var="item">
  <li>Item: <c:out value="${item}"/>, Key: <c:out value="${item.key}"/>, Value: <c:out value="${item.item}"/></li>
</ui:repeat>

ループは1回実行されますが、すべての出力が空白になりますか?!?ループを一度通過した場合、少なくともアイテムに何かが含まれていることを期待していました。Faceletsのデバッグポップアップを確認すると、規律があり、ループにあります。それを画面に印刷すると、私には地図のように見えます(出力を短くしました):

{300=0, 1600=0, 200=0, ... , 2200=0}

ac:forEachも試しましたが、同じ結果が得られています。それで、誰かが私が間違っているところについて何か考えを持っていますか?

ご意見ありがとうございます、リー

4

3 に答える 3

12

el 2.2 のサポートにより、以下のようにマップを繰り返すことができます。

<ui:repeat value="#{myBean.stats.keySet().toArray()}" var="x">
    <h:outputText value="#{myBean.stats.get(x)}" /><br />
</ui:repeat>
于 2012-06-07T14:40:59.567 に答える
10

<ui:repeat>セットまたはマップではなく、リストまたはデータモデルのみを受け入れます。これは、JSF 2.1 のロードマップにあります。

于 2010-08-18T18:22:21.720 に答える
1

次の 3 つのことが思い浮かびます。

1.

ui:repeatのドキュメントにはそれが記載されていません ( Listのみが記載されています) が、UIRepeat がDataModelをモデルとして ( h:dataTable のように) 使用していることがわかります。MapはDataModel型で自動的にラップされません。型は暗黙的にサポートされていません。値を独自のDataModel実装のインスタンスにするか、暗黙的にサポートされている型 (例: java.util.List ) として提供する必要があります。

2.

これらの値を何にマップするつもりなのかわかりません:

${item}
${item.key}
${item.item}

"discipline" をList<Map.Entry<String,String>>型に変更すると、キーと値のプロパティにバインドできます。

${item.key}
${item.value}

次のようにリストを作成できます。

Map<String, String> facetValues = new HashMap<String, String>();
// Filling the map
List<Map.Entry<String, String>> discipline
        = new ArrayList<Map.Entry<String, String>>(facetValues.entrySet());

3.

FAQ は、JSTL タグはコンポーネント ツリーの作成時にのみ評価されることを示唆しています。c:out を ui:repeat の子として使用することが適切に機能するかどうかは不明です。代わりに h:outputText を使用する必要がある場合があります。(もちろん、これについては間違っている可能性があります-試したことはありません。)


サーブレットでは、リクエストに以下を追加しています

これは、JSF で要求スコープに何かを入れる奇妙な方法のように思えますが、何をしているのか知っていると信じています。

于 2009-05-12T13:50:58.550 に答える