0

テスト/デバッグの目的で、jsf アプリケーションの値ではなく、メッセージ バンドルのキーを表示したいと考えています。それは可能ですか?

例: 私の messages_en.properties には次のエントリがあります:

global_today=today   

サンプルjsfページ

<h:outputLabel id="myId" value="{Msgs['global_today']}"/>   

ここで、今日ではなく「global_today」というページのキーを見たいと思います。

4

1 に答える 1

0

最も簡単な方法は、プロパティ ファイルの名前を変更することです。この方法では、JSF はキーを見つけられず、'today' の代わりに ???global_today??? が表示されます。

それでも表示したい場合global_todayは、次の操作を実行できます。

faces-config.xml に以下があるとしましょう

<resource-bundle>
    <base-name>my.package.resources.MyText</base-name>
</resource-bundle>

に名前MyTextを変更MyTextExtender

次に、パッケージに追加MyTextExtender.javaしますmy.package.resources

次の内容で:

public class MyTextExtender extends ResourceBundle {

    public MyTextExtender() {
        setParent(getBundle("my.package.resources.MyText", FacesContext.getCurrentInstance()
                .getViewRoot().getLocale()));
    }

    @Override
    public Enumeration<String> getKeys() {
        return parent.getKeys();
    }

    @Override
    protected Object handleGetObject(String key) {
        return key;
        //The code below will try to turn the annoying ???some_key??? 
        //into "some key" (looks better)
        /*try {
            return parent.getObject(key);
        } catch (MissingResourceException e) {
            if (!StringUtils.isEmpty(key)) {
                logger.error("Missing key: " + key + " in the properties", e);
                return key.replace("_", " ");
            } else {
                logger.error("Key was null???", e);
                return "";
            }
        }*/
    }
}
于 2014-05-20T07:50:11.377 に答える