Смешивание JSF EL в файле JavaScript - PullRequest
40 голосов
/ 30 марта 2010

Есть ли способ, чтобы выражения языка выражений (EL) включали файлы JavaScript для оценки JSF?

Я надеялся, что у Шова есть способ обойти это, но пока не повезло. Все, что я хочу, - это возможность использовать локализованные сообщения в моих функциях JavaScript, которые являются общими для всех страниц.

Ответы [ 2 ]

63 голосов
/ 30 марта 2010

Пять способов:

  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. Pass *.jsчерез JspServlet (только если достаточно оценить только выражения ${}).Например, в web.xml (<servlet-name> из JspServlet можно найти в web.xml рассматриваемого сервлет-контейнера, обычно это jsp).

    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
    
  4. Makeиспользование «старого доброго» JSP с измененным типом контента.Переименуйте script.js в script.jsp и добавьте следующую строку в начало JSP (только если этого достаточно для вычисления только выражений ${}):

    <%@page contentType="text/javascript" %>
    
  5. Пусть JS получитданные ajaxical во время загрузки.Вот целевой пример jQuery .

    $.getJSON('json/messages', function(messages) {
        $.each(messages, function(key, value) {
            $.messages[key] = value;
        });
    });
    
2 голосов
/ 24 марта 2014

Так как мне не нравятся методы, которые не позволяют браузеру кэшировать локализованные строки, я использовал следующую технику для локализации предупреждений JavaScript и т. Д. Кажется, это подходит, если строки, которые вам нужны в вашем коде JavaScript, отличается от тех, которые нужны веб-серверу:

<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?'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...