在jstl中创建动态变量名
Create dynamic variable name in jstl
我的哈希图正在申请 scope.I 有 3 个哈希图 mapEnglish、mapSpanish、mapHindi。
语言参数在我的会话中可用,它是英语,或者印地语或 Spanish.I 可以像这样访问它:${language}
现在我想根据语言 parameter.So 动态创建 hashmap 名称,例如,如果 ${language} 是英语,则映射名称应该是 mapEnglish。
我该怎么做?
我试过这个:
<c:forEach items="${applicationScope.map${language}}" var="orderedCityMap">
</c:forEach>
但是没有work.Could有人推荐???
我认为您不能嵌套 EL 表达式来实现您的需要。看看这个问题How to nest an EL expression in another EL expression
如果您访问的哈希图数量有限,那么您可以考虑使用 <c:choose>
标签。这是一个例子。
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);
您可以访问 jsp 页面中的 hashmap,如下所示
<c:set var="language" value="${applicationScope.language}"/>
<c:choose>
<c:when test="${language == 'English'}">
<c:set var="requiredMap" value="${mapEnglish}"/>
</c:when>
<c:when test="${language == 'Spanish'}">
<c:out value="Spanish"/>
<c:set var="requiredMap" value="${mapSpanish}"/>
</c:when>
<c:otherwise>
<c:out value="Hindi"/>
<c:set var="requiredMap" value="${mapHindi}"/>
</c:otherwise>
</c:choose>
<c:forEach items="${requiredMap}" var="orderedCityMap">
Key:<c:out value="${orderedCityMap.key}"/>,
Value:<c:out value="${orderedCityMap.value}"/><br>
</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>
我的哈希图正在申请 scope.I 有 3 个哈希图 mapEnglish、mapSpanish、mapHindi。 语言参数在我的会话中可用,它是英语,或者印地语或 Spanish.I 可以像这样访问它:${language}
现在我想根据语言 parameter.So 动态创建 hashmap 名称,例如,如果 ${language} 是英语,则映射名称应该是 mapEnglish。 我该怎么做?
我试过这个:
<c:forEach items="${applicationScope.map${language}}" var="orderedCityMap">
</c:forEach>
但是没有work.Could有人推荐???
我认为您不能嵌套 EL 表达式来实现您的需要。看看这个问题How to nest an EL expression in another EL expression
如果您访问的哈希图数量有限,那么您可以考虑使用 <c:choose>
标签。这是一个例子。
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);
您可以访问 jsp 页面中的 hashmap,如下所示
<c:set var="language" value="${applicationScope.language}"/>
<c:choose>
<c:when test="${language == 'English'}">
<c:set var="requiredMap" value="${mapEnglish}"/>
</c:when>
<c:when test="${language == 'Spanish'}">
<c:out value="Spanish"/>
<c:set var="requiredMap" value="${mapSpanish}"/>
</c:when>
<c:otherwise>
<c:out value="Hindi"/>
<c:set var="requiredMap" value="${mapHindi}"/>
</c:otherwise>
</c:choose>
<c:forEach items="${requiredMap}" var="orderedCityMap">
Key:<c:out value="${orderedCityMap.key}"/>,
Value:<c:out value="${orderedCityMap.value}"/><br>
</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>