所以我的消息文件中有一堆消息,其中包含
等键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呢?
答案 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.
开头的键列表,或者只显示整个键集。