2

在我的 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-plugin:1.1 - Java 版本号:1.7.0_05 - Hibernate 3.5.6-Final

4

1 回答 1

0

我通过添加我自己的标签来模仿 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}" />
于 2012-07-24T13:54:57.250 回答