2010-03-30 31 views
38

Có cách nào để có các biểu thức Expression Language (EL) bao gồm các tệp JavaScript được JSF đánh giá không?Trộn JSF EL trong một tệp JavaScript

Tôi đã hy vọng rằng Seam có thể có cách để giải quyết vấn đề này, nhưng không may mắn cho đến nay. Tất cả những gì tôi muốn là có thể sử dụng các thư được bản địa hóa trong các hàm JavaScript được chia sẻ trên các trang.

+1

Hãy Đăng một ví dụ về một hàm JavaScript. – lexicore

Trả lời

59

Năm cách:

  1. Khai báo nó như biến toàn cục trong trang mẹ 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> 
    

    Hoặc, nếu ở định dạng JSON rồi.

    <script type="text/javascript" src="script.js"></script> 
    <script type="text/javascript">var messages = #{bean.messagesAsJson};</script> 
    
  2. Đặt toàn bộ <script> trong một file XHTML và sử dụng ui:include bao gồm nó.

    <script type="text/javascript" src="script.js"></script> 
    <ui:include src="script-variables.xhtml" /> 
    
  3. đèo *.js qua JspServlet (chỉ khi nó đủ để đánh giá chỉ ${} biểu thức). Ví dụ. trong web.xml (số <servlet-name> của JspServlet có thể được tìm thấy trong web.xml của servletcontainer được đề cập, thường là jsp).

    <servlet-mapping> 
        <servlet-name>jsp</servlet-name> 
        <url-pattern>*.js</url-pattern> 
    </servlet-mapping> 
    
  4. Sử dụng JSP "tốt" cũ với loại nội dung được sửa đổi. Đổi tên script.js để script.jsp và thêm dòng sau vào đầu JSP (chỉ khi nó đủ để đánh giá chỉ ${} biểu thức):

    <%@page contentType="text/javascript" %> 
    
  5. Hãy JS được những dữ liệu ajaxically trong tải. Dưới đây là ví dụ được nhắm mục tiêu jQuery.

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

Tôi có thể thêm phần đầu tiên là dễ nhất. Hãy để Facelets xử lý nó cho bạn. –

+1

Cảm ơn tôi đã sử dụng cái đầu tiên. – user283680

+0

Cảm ơn. Không biết tôi có thể sử dụng '' bên trong một khối '

2

Vì tôi không thích kỹ thuật mà sẽ không cho phép bộ nhớ cache trình duyệt cục Strings, tôi sử dụng các kỹ thuật sau để địa phương Javascript cảnh báo, vv Nó dường như phù hợp nếu các Strings rằng bạn cần trong mã JavaScript của bạn là khác nhau từ những cái cần thiết cho máy chủ web:

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

sau đó tôi giao JsFwStrings chuỗi tài nguyên cho tên tệp của tệp JavaScript định chuỗi địa hoá cho ngôn ngữ nhất định.

Ví dụ, các tập tin fw_en.properties chứa các entry JsFwStrings = JsFwStrings_en.js

Và file JsFwStrings_en.js chứa

var TosFramework = TosFramework || {}; 
TosFramework.Strings = { 
    UnSavedChangesWarning : 'You have unsaved changes.', 
    CancelConfirmQuestion : 'Are you sure you want to cancel?' 
} 
Các vấn đề liên quan