Java 在jstl中创建动态变量名

Java 在jstl中创建动态变量名,java,jsp,jstl,Java,Jsp,Jstl,我的hashmap在应用范围内。我有3个hashmap mapEnglish、mapSpanish、mapHindi。 语言参数在我的会话中可用,它是英语、印地语或西班牙语。我可以像:${language}一样访问它 现在我想基于language参数动态创建hashmap名称,例如,如果${language}是英语,那么映射名称应该是mapEnglish。 我该怎么做 我试过这个: <c:forEach items="${applicationScope.map${language}}"

我的hashmap在应用范围内。我有3个hashmap mapEnglish、mapSpanish、mapHindi。 语言参数在我的会话中可用,它是英语、印地语或西班牙语。我可以像:${language}一样访问它

现在我想基于language参数动态创建hashmap名称,例如,如果${language}是英语,那么映射名称应该是mapEnglish。 我该怎么做

我试过这个:

<c:forEach items="${applicationScope.map${language}}" var="orderedCityMap">
</c:forEach>


但是它不起作用。有人能建议吗?

我认为你不能嵌套EL表达式来实现你所需要的。看看这个问题

如果您正在访问的hashmap的数量有限,那么您可以使用
标记。这里有一个例子

Map<String, Integer> englishHashMap = new HashMap<String, Integer>();
Map<String, Integer> spanishHashMap = new HashMap<String, Integer>();
Map<String, Integer> hindiHashMap = new HashMap<String, Integer>();

englishHashMap.put("english", 1);
englishHashMap.put("hindi", 2);
englishHashMap.put("telugu", 3);

spanishHashMap.put("english1", 1);
spanishHashMap.put("hindi1", 2);
spanishHashMap.put("telugu1", 3);

hindiHashMap.put("english2", 1);
hindiHashMap.put("hindi2", 2);
hindiHashMap.put("telugu2", 3);

String language = "English";

context.setAttribute("mapEnglish", englishHashMap);
context.setAttribute("mapSpanish", spanishHashMap);
context.setAttribute("mapHindi", hindiHashMap);
context.setAttribute("language", language);

我会这样做,特别是如果它仅限于少数几种语言:

<c:choose>
<c:when test="${language == 'English'}>
    <c:set var="map" value="${applicationScope.mapEnglish}"/>
</c:when>
<c:when test="${language == 'Hindi'}>
    <c:set var="map" value="${applicationScope.mapHindi}"/>
</c:when>
<c:when test="${language == 'Spanish'}>
    <c:set var="map" value="${applicationScope.mapSpanish}"/>
</c:when>
</c:choose>

<c:forEach items="${map}" var="orderedCityMap">
...
</c:forEach>

Key:telugu, Value:3
Key:hindi, Value:2
Key:english, Value:1
<c:choose>
<c:when test="${language == 'English'}>
    <c:set var="map" value="${applicationScope.mapEnglish}"/>
</c:when>
<c:when test="${language == 'Hindi'}>
    <c:set var="map" value="${applicationScope.mapHindi}"/>
</c:when>
<c:when test="${language == 'Spanish'}>
    <c:set var="map" value="${applicationScope.mapSpanish}"/>
</c:when>
</c:choose>

<c:forEach items="${map}" var="orderedCityMap">
...
</c:forEach>