42

JavaScriptファイルに含まれる式言語(EL)式をJSFで評価する方法はありますか?

Seamがこれを回避する方法があることを期待していましたが、今のところ運がありません。私が欲しいのは、ページ間で共有されるJavaScript関数でローカライズされたメッセージを使用できるようにすることです。

4

2 に答える 2

71

5つの方法:

  1. 親JSFページでグローバル変数として宣言します。

    <script type="text/javascript" src="script.js"></script>
    <script type="text/javascript">
        var messages = [];
        <ui:repeat value="#{bean.messages}" var="message">
            messages['#{message.key}'] = '#{message.value}';
        </ui:repeat>
    </script>
    

    または、すでにJSON形式の場合。

    <script type="text/javascript" src="script.js"></script>
    <script type="text/javascript">var messages = #{bean.messagesAsJson};</script>
    
  2. 全体<script>をXHTMLファイルに入れ、ui:includeそれを含めるために使用します。

    <script type="text/javascript" src="script.js"></script>
    <ui:include src="script-variables.xhtml" />
    
  3. (式のみを評価するのに十分な場合のみ)を通過*.jsします。例:(のは問題のservletcontainerにありますが、通常はです)。JspServlet${}web.xml<servlet-name>JspServletweb.xmljsp

    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
    
  4. コンテンツタイプが変更された「古き良き」JSPを利用します。名前を変更script.jsscript.jsp、JSPの先頭に次の行を追加します(式のみを評価するのに十分な場合のみ${})。

    <%@page contentType="text/javascript" %>
    
  5. JSがロード中にデータをajaxicallyに取得するようにします。これがjQueryを対象とした例です。

    $.getJSON('json/messages', function(messages) {
        $.each(messages, function(key, value) {
            $.messages[key] = value;
        });
    });
    
于 2010-03-30T19:04:34.407 に答える
3

ローカライズされた文字列をブラウザにキャッシュさせない手法が好きではないため、次の手法を使用してJavaScriptアラートなどをローカライズしました。JavaScriptコードに必要な文字列がWebサーバーに必要なもの:

<h:head>
    <h:outputScript library="javascript" name="#{fw.JsFwStrings}" />
    ...

次に、リソース文字列JsFwStringsを、指定された言語のローカライズされた文字列を定義するJavaScriptファイルのファイル名に割り当てます。

たとえば、fw_en.propertiesファイルにはエントリJsFwStrings=JsFwStrings_en.jsが含まれています

また、JsFwStrings_en.jsファイルには次のものが含まれています

var TosFramework = TosFramework || {};
TosFramework.Strings = {
    UnSavedChangesWarning : 'You have unsaved changes.',
    CancelConfirmQuestion : 'Are you sure you want to cancel?'
}
于 2014-03-24T08:04:11.513 に答える