2

私の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-plugin:1.1-Javaバージョン番号:1.7.0_05-Hibernate3.5.6-最終版

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 に答える