出于测试/调试目的,我想显示消息包中的键,而不是 jsf 应用程序中的值。那可能吗?
示例:我的 messages_en.properties 有以下条目:
global_today=today
示例 jsf 页面
<h:outputLabel id="myId" value="{Msgs['global_today']}"/>
现在我想查看页面中的键,“global_today”不是今天。
出于测试/调试目的,我想显示消息包中的键,而不是 jsf 应用程序中的值。那可能吗?
示例:我的 messages_en.properties 有以下条目:
global_today=today
示例 jsf 页面
<h:outputLabel id="myId" value="{Msgs['global_today']}"/>
现在我想查看页面中的键,“global_today”不是今天。
最简单的方法是重命名属性文件,这样 JSF 将找不到任何键,而您将看到 ???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 "";
}
}*/
}
}