java - JSF EL : Fallback if l18n-Propperty not found

标签 java jsf web-applications jsf-2 el

在我的 JSF 项目中,我有这样的东西

<h:outputText value="#{msg[foo]}" />

其中 msg 是我的 ResourceBundle,foo 是属性标识符的变量,例如包含 label.car,这样代码将返回carAuto(国际化)。

问题:

如果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/

相关文章:

java - 如何检查jsp页面中是否存在变量是否被另一个页面包含

java - LWJGL Javadoc 及其描述?

java - 在构造函数中使用多个参数的性能

java - 使用 EntityManager 查询时出现 Spring JPA NullPointerException

JSF/Primefaces : ui:insert in ui:include

jsf - com.sun.faces.config.ConfigureListener 的配置

java - Spring/MVC webapp 中 Controller 和 Model Java 类的命名约定?

google-apps-script - 无效参数 : Userinterface error with createTemplateFromFile

java - Primefaces 更新破坏变音符号

javascript - 如何创建自动化应用程序导览/演练?