有没有办法让JSF 评估包含 JavaScript 文件的表达式语言(EL) 表达式?
我希望 Seam 可以解决这个问题,但到目前为止还没有运气。我想要的只是能够在我的 JavaScript 函数中使用跨页面共享的本地化消息。
有没有办法让JSF 评估包含 JavaScript 文件的表达式语言(EL) 表达式?
我希望 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
可以发现web.xml
有问题的servletcontainer的,它通常是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 代码中需要的字符串与Web服务器需要的:
<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?'
}