因此,我的消息文件中有一堆消息,它们的关键字如下
alt.text1=Hello
alt.text2=Goodbye在我的JSP中,我可以通过以下命令很好地获取和显示这些内容
<spring:message code="alt.text1"/>
<spring:message code="alt.text2"/>,它将呈现为
Hello Goodbye问题是,我如何获取关键字以'alt‘开头的所有消息。即我想一次显示所有的' alt‘消息,但不显示文件中不以alt开头的任何其他消息。
我知道消息是JSP中的一个hashmap,例如,我如何访问这个映射来迭代它的键和值?
发布于 2012-11-09 02:41:15
我最终创建了一个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-09-23 21:57:53
我不知道Spring,但看起来没有使用Spring获取消息包的tag。
如果您使用<fmt:setBundle/>,您将获得一个LocalizationContext对象,其中包含一个ResourceBundle。不幸的是,无法使用表达式语言访问keySet方法。
您可以做的是在bean中加载消息包,并创建一个以alt.开头的密钥列表,或者公开整个密钥集。
https://stackoverflow.com/questions/11966718
复制相似问题