Five ways:
-
Declare it as global variable in the parent JSF page.
<script type="text/javascript" src="https://stackoverflow.com/questions/2547814/script.js"></script> <script type="text/javascript"> var messages = []; <ui:repeat value="#{bean.messages}" var="message"> messages['#{message.key}'] = '#{message.value}'; </ui:repeat> </script>Or, if it’s in JSON format already.
<script type="text/javascript" src="https://stackoverflow.com/questions/2547814/script.js"></script> <script type="text/javascript">var messages = #{bean.messagesAsJson};</script> -
Put the whole
<script>in a XHTML file and useui:includeto include it.<script type="text/javascript" src="https://stackoverflow.com/questions/2547814/script.js"></script> <ui:include src="script-variables.xhtml" /> -
Pass
*.jsthrough theJspServlet(only if it’s enough to evaluate only the${}expressions). E.g. inweb.xml(the<servlet-name>ofJspServletcan be found inweb.xmlof the servletcontainer in question, it’s usuallyjsp).<servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> -
Make use of “good old” JSP with a modified content type. Rename
script.jstoscript.jspand add the following line to top of JSP (only if it’s enough to evaluate only the${}expressions):<%@page contentType="text/javascript" %> -
Let JS obtain the data ajaxically during load. Here’s a jQuery targeted example.
$.getJSON('json/messages', function(messages) { $.each(messages, function(key, value) { $.messages[key] = value; }); });