【问题标题】:How to generate multiple HTML items based on a properties file?如何根据属性文件生成多个 HTML 项?
【发布时间】:2011-12-08 09:35:25
【问题描述】:

我有以下属性文件:

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请求属性。

我在 JSP 中生成 HTML 如下:

<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 属性中的记录总数。

【问题讨论】:

    标签: java jstl properties-file


    【解决方案1】:

    资源包已经是一种从键到值的映射,除了它有一个回退机制。为什么要将其内容复制到另一张地图?

    只需使用&lt;fmt:message&gt; 标记:它的目标正是从资源包中获取消息并将其输出到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>
    

    最后一个显示“Welcome John!”的 sn-p如果问候键的值为“欢迎{0}!”。

    标签还可以将值存储在变量中,并将 EL 表达式作为参数,所以这个 sn-p 应该可以实现你的循环:

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

    【讨论】:

    • 好点,但这并不是 OP 实际上 所要求的。
    • 啊,好的。我错过了问题的最后一部分。我将编辑我的答案。
    • @JBNizet 出现错误...在 org.apache.jasper.servlet.JspServlet.handleMissingResource(JspServlet.java:335)
    • 没有工作尝试了很多组合并操纵它.. :(
    • @Varun :我检查了示例中的一些拼写错误(fmt:message 标记中的键而不是值,以及 loopStatus 而不是 varStatus)。我测试了这个解决方案,它按预期工作。向我们展示整个 JSP 文件,并告诉我们捆绑文件在您的 Web 应用程序中的完整路径。确保在 JSP 的顶部声明使用 fmt 标签库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多