#java #jstl #properties-file
#java #jstl #свойства-файл
Вопрос:
У меня есть следующий файл свойств:
title = Welcome to Home Page
total = 5
gallery1 = images/gallery/cs.png
text1 = <b>Counter Strike</b><br />
gallery2 = images/gallery/css.png
text2 = <b>Counter Strike Source Servers Available</b>
gallery3 = images/gallery/cs.png
text3 = <b>Counter Strike</b>
gallery4 = images/gallery/cs.png
text4 = <b>Counter Strike</b>
gallery5 = images/gallery/cs.png
text5 = <b>Counter Strike</b>
Я загружаю его следующим образом:
public static HashMap<String, String> getPropertyMap(String asPropBundle) throws ApplicationException {
HashMap<String, String> loMap = new HashMap<String, String>();
ResourceBundle loRB = (ResourceBundle) moHMProp.get(asPropBundle) ;
if (loRB == null) {
throw new ApplicationException("No property bundle loaded with name: " asPropBundle);
}
Enumeration<String> loKeyEnum = loRB.getKeys();
while (loKeyEnum.hasMoreElements()) {
String key = (String) loKeyEnum.nextElement();
loMap.put(key, loRB.getString(key));
}
return loMap ;
}
Возвращаемая карта устанавливается как атрибут HTTP-запроса.
Я генерирую HTML в JSP следующим образом:
<li class="s3sliderImage">
<img src="${map.gallery1}" />
<span>${map.text1}</span>
</li>
.
.
.
<li class="s3sliderImage">
<img src="${map.gallery2}" />
<span>${map.text2}</span>
</li>
Как я могу сделать это динамически в цикле? У меня есть общее количество записей в total
свойстве файла свойств.
Ответ №1:
Пакет ресурсов уже представляет собой своего рода карту от ключей к значениям, за исключением того, что у него есть запасной механизм. Почему вы копируете его содержимое на другую карту?
Просто используйте <fmt:message>
тег: его цель — получить сообщение из пакета ресурсов и вывести его в JSP writer. И, конечно, его можно параметризовать :
<fmt:setBundle basename="the.base.name.of.your.Bundle"/>
<fmt:message key="text2"/>
<img src="<fmt:message key="gallery2"/>" />
<fmt:message key="greeting">
<fmt:param value="${user.firstName}"/>
</fmt:message>
Этот последний фрагмент, отображающий «Добро пожаловать, Джон!», Если значение ключа приветствия равно «Welcome {0}!».
Тег также может сохранять значение в переменной и принимать выражение EL в качестве параметра, поэтому этот фрагмент должен работать для реализации вашего цикла:
<fmt:message var="total" key="total"/>
<c:forEach begin="1" end="${total}" varStatus="loopStatus">
<li class="s3sliderImage">
<img src="<fmt:message key="gallery${loopStatus.index}"/>" />
<span><fmt:message key="text${loopStatus.index}"/></span>
</li>
</c:forEach>
Комментарии:
1. Хороший момент, но это не совсем то, о чем на самом деле спрашивает OP.
2. Ах, хорошо. Я пропустил последнюю часть вопроса. Я отредактирую свой ответ.
3. @JBNizet выдает ошибку …в org.apache.jasper.servlet.JspServlet.handleMissingResource(JspServlet.java:335)
4. не сработало, перепробовал много комбинаций и манипулировал ими .. 🙁
5. @Varun : я проверил некоторые опечатки в примере (ключ вместо значения в теге fmt:message и loopStatus вместо varStatus). Я протестировал это решение, и оно работает так, как ожидалось. Покажите нам весь файл JSP и укажите полный путь к файлу пакета в вашем веб-приложении. Не забудьте объявить использование fmt taglib в верхней части JSP.