2012-08-15 64 views
2

所以我有一堆在我的邮件消息的“开头”的钥匙文件中像春:消息,如何让所有的消息与关键

alt.text1=Hello 
alt.text2=Goodbye 

在我的JSP我可以读取并显示这些就好了与

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

这使得作为

Hello Goodbye 

的问题是,我怎么能获取所有其消息密钥的S-与'alt'的挞。 IE我想显示所有'alt'消息一次,但不显示文件中不以alt开头的任何其他消息。

我知道这些消息是JSP中的散列映射,我怎样才能访问这个映射来通过它的键和值来访问它呢?

回答

1

我最终创建了一个如下所示的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; 
    } 

} 

我用弹簧的Webflow(隐藏了大部分控制器),但在控制器/动作基本上某处渲染页面之前,请拨打listAllAltLabels和分配结果“altLabelMessages”,并将其放入模型/视图。

然后在视图(JSP)

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

嗨对不起...我不知道你在哪里加载属性文件。你用不同的方法做了这个吗?感谢您分享这一点.... – 2017-03-20 09:00:29

0

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

如果您使用<fmt:setBundle/>,您将收到一个LocalizationContext对象,其中包含一个ResourceBundle。不幸的是,keySet方法不能使用表达式语言访问。

你可以做的是将消息包加载到bean中,并创建一个以alt.开头的密钥列表,或者只是公开整个密钥集。