incluir from example bean javascript jsf seam el

from - javascript in primefaces xhtml



Mezcla JSF EL en un archivo JavaScript (2)

Cinco formas:

  1. Declararlo como variable global en la página padre 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>

    O bien, si ya está en formato JSON.

    <script type="text/javascript" src="script.js"></script> <script type="text/javascript">var messages = #{bean.messagesAsJson};</script>

  2. Coloque todo el <script> en un archivo XHTML y use ui:include para incluirlo.

    <script type="text/javascript" src="script.js"></script> <ui:include src="script-variables.xhtml" />

  3. Pase *.js través del JspServlet (solo si es suficiente para evaluar solo las expresiones ${} ). Por ejemplo, en web.xml (el <servlet-name> de JspServlet se puede encontrar en web.xml del servletcontainer en cuestión, generalmente es jsp ).

    <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping>

  4. Haga uso de JSP "bueno viejo" con un tipo de contenido modificado. Cambie el nombre de script.js a script.jsp y agregue la siguiente línea a la parte superior de JSP (solo si es suficiente para evaluar solo las expresiones ${} ):

    <%@page contentType="text/javascript" %>

  5. Deje que JS obtenga los datos ajaxically durante la carga. Aquí hay un ejemplo específico de jQuery .

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

¿Hay alguna manera de que JSF evalúe las expresiones de Expression Language (EL) incluidos los archivos de JavaScript?

Tenía la esperanza de que Seam pudiera evitar esto, pero hasta ahora no había tenido suerte. Todo lo que quiero es poder utilizar mensajes localizados en mis funciones de JavaScript que se comparten en todas las páginas.


Como no me gustan las técnicas que no permiten al navegador almacenar en caché las cadenas localizadas, utilicé la siguiente técnica para localizar las alertas de JavaScript, etc. Me parece una buena opción si las cadenas que necesita en su código JavaScript son diferentes a las del los que necesita el servidor web:

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

A continuación, asigno la cadena de recursos JsFwStrings al nombre del archivo JavaScript que define las cadenas localizadas para el idioma dado.

Por ejemplo, el archivo fw_en.properties contiene la entrada JsFwStrings = JsFwStrings_en.js

Y el archivo JsFwStrings_en.js contiene

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