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

以下のように作成し、CustomerMessageSourcelistAllAltLabels の結果をビューに配置することになりました。次に、それを反復する単純なケースでした。

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/>が取得されます。残念ながら、式言語を使用してメソッドにアクセスすることはできません。LocalizationContextResourceBundlekeySet

メッセージ バンドルを Bean にロードし、 で始まるキーのリストを作成するalt.か、キー セット全体を公開するだけです。

于 2012-09-23T13:57:52.967 に答える