在我的 JSF 项目中,我有这样的东西
<h:outputText value="#{msg[foo]}" />
其中 msg 是我的 ResourceBundle,foo 是属性标识符的变量,例如包含 label.car,这样代码将返回car或Auto(国际化)。
问题:
如果foo设置为ResourceBundle中不存在的属性标识符,比如说boat,应用程序当然会崩溃并显示 javax.el.PropertyNotFoundException
.
在 Spring 中,有一种方法可以通过默认消息来处理此问题。
<spring:message code="${foo}" text="${foo}" />
(返回标识符本身而不是其国际化值)
..我无法在 JSF 中执行此操作。
有什么提示可以在 JSF 中实现类似的功能吗?谢谢!
//更新: - Apache Tomcat/6.0.29 - Apache MyFaces-2 - PrimeFaces 3.3 - tomcat-maven-插件:1.1 - Java版本号:1.7.0_05 - Hibernate 3.5.6-最终版
最佳答案
我通过adding my own tag“解决”了这个问题通过这样做来模仿 Spring 行为:
(我的 TagHandler 实现的摘录)
value = getAttribute("value").getValue(context);
...
key = getAttribute("key").getValue(context);
...
if (key != null) {
try {
w.write(String.format("%s", getLocalizedString(key, bundle)));
} catch (final Exception cause) {
if (value != null) {
w.write(String.format("%s", value));
} else {
// exception / invalid key
}
}
} else if (value != null) {
w.write(String.format("%s", value));
} else {
// exception / do noting
}
所以我可以这样使用它:
<my:outputText key="#{key}" value="#{fallback_value}" />
关于java - JSF EL : Fallback if l18n-Propperty not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11616084/