Как создать несколько элементов HTML на основе файла свойств?

У меня есть следующий файл свойств:

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 файла свойств.


person Varun    schedule 15.10.2011    source источник


Ответы (1)


Пакет ресурсов уже является своего рода картой от ключей к значениям, за исключением того, что у него есть резервный механизм. Почему вы копируете его содержимое на другую карту?

Просто используйте тег <fmt:message>: его цель как раз и состоит в том, чтобы получить сообщение из пакета ресурсов и вывести его в модуль записи JSP. И, конечно же, его можно параметризовать:

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

Этот последний фрагмент с надписью «Добро пожаловать, Джон!» если значением ключа приветствия является "Добро пожаловать {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>
person JB Nizet    schedule 15.10.2011
comment
Хороший вопрос, но это не совсем то, о чем спрашивает ОП на самом деле. - person BalusC; 16.10.2011
comment
Ах хорошо. Я пропустил последнюю часть вопроса. Я отредактирую свой ответ. - person JB Nizet; 17.10.2011
comment
@JBNizet получает ошибку ... в org.apache.jasper.servlet.JspServlet.handleMissingResource(JspServlet.java:335) - person Varun; 17.10.2011
comment
не сработало перепробовал кучу комбинаций и манипулировал.. :( - person Varun; 17.10.2011
comment
@Varun: я проверил некоторые опечатки в примере (ключ вместо значения в теге fmt: message и loopStatus вместо varStatus). Я протестировал это решение, и оно работает так, как ожидалось. Покажите нам весь файл JSP и сообщите нам полный путь к файлу пакета в вашем веб-приложении. Не забудьте объявить использование fmt taglib в верхней части JSP. - person JB Nizet; 17.10.2011