为了测试/调试目的,我想显示消息包中的键而不是我的jsf应用程序中的值。这可能吗?
实施例: 我的messages_en.properties有以下条目:
global_today=today
示例jsf page
<h:outputLabel id="myId" value="{Msgs['global_today']}"/>
现在我想看到页面中的密钥,“global_today”不是今天。
答案 0 :(得分:0)
最简单的方法是重命名属性文件,这样JSF就找不到任何密钥了,而不是今天&#39;你会看到??? 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 "";
}
}*/
}
}