1

私はHashMapコントローラに持っています:

HashMap<String, ArrayList<String> map = new HashMap<String, ArrayList<String>();

JSPページでは、次のような方法でこれにアクセスしたい:

<c:forEach var="list" items="${requestScope.list}">
   <c:set var="testing" value="{requestScope.map}"></c:set>
   <c:forEach var="anotherTesting" items="${testing['${list.item}']}">
      <option><c:out value="${anotherTesting}"/></option>
   </c:forEach>
</c:forEach>

Wherelist.itemは文字列ですが、別のプロセスに使用されていますが、にアクセスするために使用したいですHashMap

JSTL を連結する方法はありますか? どちらかmap.keyまたはmap['key']するでしょう。

4

2 に答える 2

3

私は単にこれがうまくいくと思います:

<c:forEach var="anotherTesting" items="${testing[list.item]}">
   <option><c:out value="${anotherTesting}"/></option>
</c:forEach>

引用符がある場合とない場合の違いに注意してください。

  • ${testing[list.item]}と同等ですtesting.get(list.getItem());
  • ${testing['list.item']}と同等testing.get("list.item");です。

いくつかの注意:

  • 異なるスコープで同じ名前と競合しない限り、属性にアクセスするためにスコープを指定する必要はありません。したがって、"${requestScope.list}"に変更でき${list}、に変更"${requestScope.map}"できます${map}

  • var外側のループの属性には別の名前を使用してください。listItemの代わりになる場合がありlistます。

  • mapを別の変数に設定する必要はありません。それ<c:set...>は必要ありません。属性のプロパティに直接アクセスできmapます。

したがって、ループを次のように変更できます。

<c:forEach var="listItem" items="${list}">
   <c:forEach var="anotherTesting" items="${map[listItem.item]}">
      <option><c:out value="${anotherTesting}"/></option>
   </c:forEach>
</c:forEach>
于 2013-10-01T06:17:49.687 に答える
0

のコード${...}は JSTL ではなくExpression Languageです。EL式をc—o—n—c—a—t—e—n—a—t—e—ネストする必要はありません${}。きれいに追加するだけです。

これを知っていると、式${testing['${list.item}']}は になります${testing[list.item]}

ただしtesting、が実際にでない限り、これは本当に必要/必要なものではないことに注意してくださいMap<String, ArrayList<String>>。そうしないと、予期しない結果が得られます。requestScope.list上記のコードから、が aであると仮定するList<Map<String, ArrayList<String>>>と、コードは次のようになります。

<c:forEach var="listItem" items="${list}">
    <c:forEach var="innerString" items="${map[listItem.item]}">
        <option><c:out value="${innerString}"/></option>
    </c:forEach>
</c:forEach>

は、属性がなく、ページ、セッション、またはアプリケーション スコープにないと仮定するの${list}と同じであることに注意してください。${requestScope.list}list${map}

于 2013-10-01T06:19:35.390 に答える