有没有办法让Expression Language (EL) 表达式包含的 JavaScript 文件会被 JSF 评估吗?
我希望 Seam 可以解决这个问题,但到目前为止运气不好。我想要的只是能够在跨页面共享的 JavaScript 函数中使用本地化消息。
最佳答案
五种方式:
在父 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>
把整个
<script>
在 XHTML 文件中并使用ui:include
包括它。<script type="text/javascript" src="script.js"></script> <ui:include src="script-variables.xhtml" />
通过
*.js
通过JspServlet
(仅当足以评估${}
表达式时)。例如。在web.xml
(<servlet-name>
的JspServlet
可以在相关servletcontainer 的web.xml
中找到,通常是jsp
)。<servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping>
使用具有修改内容类型的“好旧”JSP。重命名
script.js
至script.jsp
并将以下行添加到 JSP 的顶部(仅当它足以计算${}
表达式时):<%@page contentType="text/javascript" %>
让JS在加载时通过ajax方式获取数据。这是一个 jQuery有针对性的例子。
$.getJSON('json/messages', function(messages) { $.each(messages, function(key, value) { $.messages[key] = value; }); });
关于javascript - 在 JavaScript 文件中混合 JSF EL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2547814/