1

**重複の可能性: この場合、この投稿の解決策は実行できません。この投稿をもう一度開いてください! **
JSF Bean プロパティが外部 JavaScript ファイルで評価されない

<outputScript>EL パーサーは、タグを含むファイル (JavaScript ファイル)を変換しません。リソースバンドルにアクセスしようとしたとき。

<h:outputScript library="js" name="myScripts.js" target="head"/>;

myScripts.js ファイル:

alert("#{msg.browser_not_html5_compatible}");

その結果、アラート ウィンドウが表示されるときに同じ文字列が返されます。

XHTML ファイルのタグにこの JavaScript 行がある場合<script>、EL パーサーはそれをバンドルの正しいリソース文字列に置き換えます。

<script>
    alert("#{msg.browser_not_html5_compatible}");
</script>

含まれている ( ) JavaScript ファイルを EL パーサーに翻訳させて<h:outputScript>、リソース バンドルにアクセスさせることはできますか?

4

1 に答える 1

1

サーブレット

1 つのオプションは、メッセージ バンドルをロードし、メッセージ キーと値を含む JSON オブジェクトを含む Javascript ファイルを作成するサーブレットを作成することです。次のようになります。

var messages = {
  "browser_not_html5_compatible": "You browser..."
, "other_key": "Other value"
};

大きなリソース バンドルがあり、すべてのメッセージを Javascript に公開したくない場合は、特定の Javascript メッセージの前にjs_. そうすれば、リソース バンドルを簡単に反復処理してkeySet、Javascript キーのみを使用できます。

for (String key : resourceBundle.keySet()){
  if (key.startsWith("js_")){
    // Do something with resourceBundle.getString(key);
  }
}

JSF ページで、生成された Javascript を追加する必要があります。必要な場合は、次を使用してビューのロケールをサーブレットに渡すことができます#{view.locale}

<h:outputScript library="js" name="/path-to-servlet/#{view.locale}" target="head"/>
<h:outputScript library="js" name="myScripts.js" target="head"/>

そして、myScripts.jsあなたは使用することができます:

alert(messages.browser_not_html5_compatible);

JSP

サーブレット オプションのバリエーションは、JSP を使用して JSON を含む Javascript を作成することです。コンテンツ タイプをapplication/javascript次のように設定すると、次のことができます。

<%@ page contentType="application/javascript; charset=UTF-8" %>

ただし、リソースバンドルを反復処理するにはEL 2.2が必要keySetです (アクセスするゲッターがないため)。

于 2012-10-03T10:34:37.103 に答える