web-dev-qa-db-ja.com

変数をキーとして使用してELのマップ値にアクセスする

ELに${map}としてMapがあり、それ自体が${key}の値を持つEL変数"1000"でもあるキーを使用して、その値を取得しようとしています。

${map["1000"]}の使用は機能しますが、${map["$key"]}は機能しません。何が問題なのですか、また変数としてキーを使用してMap値を取得するにはどうすればよいですか?

16
user1643001

$は変数名の始まりではなく、式の始まりを示します。マップkeyのプロパティmapにアクセスするには、${map[key]}を使用する必要があります。

GETパラメータを使用して、次のクエリ文字列を使用してページで試すことができます。例:?whatEver=something

<c:set var="myParam" value="whatEver"/>
whatEver: <c:out value="${param[myParam]}"/>

これは出力します:

whatEver: something

参照: https://stackoverflow.com/tags/el/info とスクロールして、「中括弧表記」セクションまでスクロールしてください。

21
Jasper de Vries

以前にこの問題に直面したことがあります。これは通常、キーが文字列でない場合に発生します。修正は、キーを使用してマップから値を取得する前に、キーを文字列にキャストすることです。

このようなもの:

<c:set var="keyString">${someKeyThatIsNotString}</c:set>

<c:out value="${map[keyString]}"/>

それが役に立てば幸い

4
allkenang

以下のように、Java側のマップにKey-Valueを配置し、JSTLページのJSPを使用して同じ値にアクセスできます。

前Java 1.7:

Map<String, String> map = new HashMap<String, String>();
map.put("key","value");

Java 1.7以降:

Map<String, String> map = new HashMap<>();
map.put("key","value");

JSPスニペット:

<c:out value="${map['key']}"/>
2
Arpit Aggarwal