2010-03-30 13 views
38

C'è un modo per includere le espressioni Expression Language (EL) in cui i file JavaScript devono essere valutati da JSF?Miscelazione di JSF EL in un file JavaScript

Speravo che Seam potesse aggirare il problema, ma finora non ha avuto fortuna. Tutto quello che voglio è poter usare i messaggi localizzati nelle mie funzioni JavaScript che sono condivisi tra le pagine.

+1

Si prega di inviare un esempio di una funzione JavaScript. – lexicore

risposta

59

cinque modi:

  1. dichiara come variabile globale nella pagina padre 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> 
    

    Oppure, se è già in formato JSON.

    <script type="text/javascript" src="script.js"></script> 
    <script type="text/javascript">var messages = #{bean.messagesAsJson};</script> 
    
  2. mettere l'intera <script> in un file XHTML e utilizzare ui:include ad inserirlo.

    <script type="text/javascript" src="script.js"></script> 
    <ui:include src="script-variables.xhtml" /> 
    
  3. Passo *.js attraverso il JspServlet (solo se è abbastanza per valutare solo i ${} espressioni). Per esempio. in web.xml (lo <servlet-name> di JspServlet può essere trovato in web.xml del contenitore servlet in questione, di solito è jsp).

    <servlet-mapping> 
        <servlet-name>jsp</servlet-name> 
        <url-pattern>*.js</url-pattern> 
    </servlet-mapping> 
    
  4. Fare uso di "buon vecchio" JSP con un tipo di contenuto modificato. Rinominare script.js a script.jsp e aggiungere la seguente riga alla cima di JSP (solo se è abbastanza per valutare solo i ${} espressioni):

    <%@page contentType="text/javascript" %> 
    
  5. Let JS ottenere i dati ajaxically durante il caricamento. Ecco un esempio mirato di jQuery.

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

Potrei aggiungere che il primo è il più semplice. Lascia fare a Facelets per te. –

+1

Grazie, ho usato il primo. – user283680

+0

Grazie. Non sapevo che potrei usare '' all'interno di un blocco '

2

Dal momento che non mi piace tecniche che non lasceranno la cache del browser l'stringhe localizzate, ho usato la seguente tecnica di localizzare avvisi JavaScript, ecc Sembra una buona misura, se le stringhe che avete bisogno nel vostro codice JavaScript sono diversi da quelli necessari dal server Web:

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

ho quindi assegnare le JsFwStrings stringa di risorsa per il nome del file JavaScript che definisce le stringhe localizzate per la lingua data.

Ad esempio, il file fw_en.properties contiene la voce JsFwStrings = JsFwStrings_en.js

e il file contiene JsFwStrings_en.js

var TosFramework = TosFramework || {}; 
TosFramework.Strings = { 
    UnSavedChangesWarning : 'You have unsaved changes.', 
    CancelConfirmQuestion : 'Are you sure you want to cancel?' 
} 
Problemi correlati