4

所以我的消息文件中有一堆消息,其中的键如下

alt.text1=Hello
alt.text2=Goodbye

在我的 JSP 中,我可以使用

<spring:message code="alt.text1"/>
<spring:message code="alt.text2"/>

呈现为

Hello Goodbye

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

我知道消息是 JSP 中的哈希图,例如,我如何访问此映射以遍历其键和值?

4

2 回答 2

4

我最终创建了一个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>
于 2012-11-08T18:41:14.860 回答
0

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

如果你会使用<fmt:setBundle/>,你会得到一个LocalizationContext对象,其中包含一个ResourceBundle. 不幸的keySet是,使用表达式语言无法访问该方法。

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

于 2012-09-23T13:57:52.967 回答