在JavaScript文件中混合使用JSF EL

use*_*680 40 javascript jsf seam el

有没有办法让包含JavaScript文件的表达式语言(EL)表达式由JSF评估?

我希望Seam可以解决这个问题,但到目前为止还没有运气.我想要的只是能够在我的JavaScript函数中使用本地化的消息,这些消息在页面之间共享.

Bal*_*usC 64

五种方式:

  1. 在父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>
    
    Run Code Online (Sandbox Code Playgroud)

    或者,如果它已经是JSON格式.

    <script type="text/javascript" src="script.js"></script>
    <script type="text/javascript">var messages = #{bean.messagesAsJson};</script>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将整体<script>放在XHTML文件中并用于ui:include包含它.

    <script type="text/javascript" src="script.js"></script>
    <ui:include src="script-variables.xhtml" />
    
    Run Code Online (Sandbox Code Playgroud)
  3. *.jsJspServlet(只有当它足以只评价${}表达式).例如,在web.xml(对<servlet-name>JspServlet可以发现web.xml有问题的servletcontainer的,它通常是jsp).

    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用具有修改内容类型的"good old"JSP.重命名script.js,以script.jsp与下面的行添加到JSP(只有当它足以只评价的顶部${}表达式):

    <%@page contentType="text/javascript" %>
    
    Run Code Online (Sandbox Code Playgroud)
  5. 让JS在加载期间获取数据.这是一个jQuery目标示例.

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

  • 我可以补充一点,第一个是最简单的.让Facelets为您处理它. (4认同)