spring:message,如何使用键'开头'获取所有消息

时间:2012-08-15 09:12:43

标签: spring jsp jstl

所以我的消息文件中有一堆消息,其中包含

等键
alt.text1=Hello
alt.text2=Goodbye

在我的JSP中,我可以使用

获取并显示这些内容
<spring:message code="alt.text1"/>
<spring:message code="alt.text2"/>

呈现为

Hello Goodbye

问题是,我如何获取其密钥以'alt'开头的所有邮件。 IE我想显示所有'alt'消息一次但不是文件中不以alt开头的任何其他消息。

我理解这些消息是JSP中的一个hashmap,如何通过它的键和值来访问这个map to iternate呢?

2 个答案:

答案 0 :(得分:2)

我最终创建了一个CustomerMessageSource,如下所示,并将listAllAltLabels的结果放在视图上。然后,这是一个迭代的简单案例。

public class CustomMessageSource extends ReloadableResourceBundleMessageSource {

    public Map<String, String> listAllAltLabels(String basename, Locale locale) {
        Map<String, String> altLabels = new HashMap<String, String>();

        PropertiesHolder propertiesHolder = getMergedProperties(locale);
        Properties properties = propertiesHolder.getProperties();

        for(Object key : properties.keySet()){
            if(((String)key).startsWith("alt.")) {
                altLabels.put((String)key, (String)properties.get(key));
            }
        }

        return altLabels;
    } 

}

我使用spring webflow(隐藏大多数控制器)但在渲染页面之前基本上在控制器/操作中的某个位置,调用listAllAltLabels并将结果分配给“altLabelMessages”并将其放入模型/视图中。

然后在视图中(jsp)

<c:forEach items="${altLabelMessages}" var="message">
    <form:option value="${message.key}" label="${message.value}"/>
</c:forEach>

答案 1 :(得分:0)

我不知道Spring,但看起来没有tag来使用Spring获取消息包。

如果您使用<fmt:setBundle/>,您将获得一个LocalizationContext对象,其中包含ResourceBundle。遗憾的是,使用表达式语言无法访问keySet方法。

您可以做的是在bean中加载消息包并创建以alt.开头的键列表,或者只显示整个键集。