出于测试/调试的目的,我想显示消息包中的键,而不是jsf应用程序中的值。这可能吗?
的例子:我的messages_en。属性有以下条目:
global_today=today
示例JSF页面
<h:outputLabel id="myId" value="{Msgs['global_today']}"/>
现在我想在页面中看到键,"global_today"不是今天。
最简单的方法是重命名属性文件,这样JSF就不会找到任何键,而您将看到的不是'today',而是global_today??
如果您仍然想要查看global_today
,您可以执行以下操作:
假设你在faces-config.xml中有以下内容
<resource-bundle>
<base-name>my.package.resources.MyText</base-name>
</resource-bundle>
将MyText
重命名为MyTextExtender
然后在my.package.resources
包中添加MyTextExtender.java
包含以下内容:
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 "";
}
}*/
}
}