2015-03-24 4 views
0

My hashmap находится в области приложения. У меня есть 3 хэш-карты mapEnglish, mapSpanish, mapHindi. Параметр языка доступен в моей сессии, и это английский, или хинди или испанский. Я могу получить к нему доступ так: $ {language}Создать динамическое имя переменной в jstl

Теперь я хочу создать имя хэш-карты динамически на основе языкового параметра. Например, если $ {language} является английским, имя карты должно быть mapEnglish. Как я могу это сделать?

Я попытался это:

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

Но это не work.Could кто-нибудь предложить ???

ответ

1

Я думаю, вы не можете вложить выражения 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); 

Вы можете получить доступ к HashMap на странице JSP, как показано ниже

<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 
+0

Спасибо !!! :) ссылка, содержащаяся в вашем сообщении, выполнила эту работу. – Jeets

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> 
Смежные вопросы