Misturando JSF EL em um arquivo JavaScript

Existe uma maneira de ter expressões Expression Language (EL) incluídas arquivos JavaScript ser avaliado pelo JSF?

Eu estava esperando que Seam pudesse dar um jeito nisso, mas sem sorte até agora. Tudo o que quero é poder usar mensagens localizadas em minhas funções JavaScript, que são compartilhadas entre as páginas.

Cinco maneiras:

  1. Declare-o como variável global na página JSF pai.

      

    Ou, se já estiver no formato JSON.

       
  2. Coloque o inteiro em um arquivo XHTML e use ui:include para incluí-lo.

       
  3. Passe *.js pelo JspServlet (somente se for suficiente para avaliar apenas as expressões ${} ). Por exemplo, em web.xml (o do JspServlet pode ser encontrado em web.xml do servletcontainer em questão, geralmente é jsp ).

      jsp *.js  
  4. Faça uso do JSP "bom e velho" com um tipo de conteúdo modificado. Renomeie script.js para script.jsp e adicione a seguinte linha ao início do JSP (apenas se for suficiente para avaliar apenas as expressões ${} ):

     < %@page contentType="text/javascript" %> 
  5. Deixe o JS obter os dados ajaxicamente durante o carregamento. Aqui está um exemplo de segmentação do jQuery .

     $.getJSON('json/messages', function(messages) { $.each(messages, function(key, value) { $.messages[key] = value; }); }); 

Como não gosto de técnicas que não deixem o navegador armazenar em cache as Strings localizadas, usei a seguinte técnica para localizar alertas JavaScript, etc. Parece um bom ajuste se as Strings que você precisa em seu código JavaScript forem diferentes das aqueles necessários pelo servidor da Web:

   ... 

Em seguida, atribuo a cadeia de recurso JsFwStrings ao nome do arquivo do arquivo JavaScript que define as cadeias localizadas para o idioma especificado.

Por exemplo, o arquivo fw_en.properties contém a input JsFwStrings = JsFwStrings_en.js

E o arquivo JsFwStrings_en.js contém

 var TosFramework = TosFramework || {}; TosFramework.Strings = { UnSavedChangesWarning : 'You have unsaved changes.', CancelConfirmQuestion : 'Are you sure you want to cancel?' }