Пакет сообщений показывает ключи вместо значения
Для целей тестирования / отладки я хочу показать ключи из пакета сообщений вместо значений в моем приложении jsf. Это возможно?
Пример: мой messages_en.properties имеет следующую запись:
global_today=today
пример страницы JSF
<h:outputLabel id="myId" value="{Msgs['global_today']}"/>
Теперь я хочу видеть ключ на странице "global_today" не сегодня.
1 ответ
Решение
Самый простой способ - переименовать файл свойств, чтобы JSF не нашел ни одного ключа, и вместо "сегодня" вы увидите "global_today".
Если вы все еще хотите увидеть global_today
Вы можете сделать следующее:
Допустим, у вас есть следующее в вашем Face-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 "";
}
}*/
}
}