Desidero utilizzare il tag fmt di JSTL in JavaScript per localizzare i miei messaggi di avviso. Il mio file JavaScript è un file standalone e quando includo il tag fmt in js, il file browser restituisce errori JavaScript. È possibile trattare il file .js
come file .jsp
utilizzando la configurazione web.xml? Qualcuno può suggerire per favore come posso farlo?Utilizzo del codice JSP in JavaScript
risposta
Si potrebbe fare quanto segue. Memorizzi il messaggio tradotto in una variabile che può essere risolta in un secondo momento in JSP.
<fmt:message key="your.alert" var="theAlert"/>
<script type="text/javascript">
alert("${theAlert}");
</script>
Non è possibile utilizzare i tag in JavaScript, ma c'è una soluzione: mettere il tag in un nascosto DIV
(<div style="display: none;" id="msg"><fmt:...>
Ora è possibile utilizzare JS per cercare il DIV
dal suo ID e ottenere il innerHTML
.
detto questo, fmt è solo un wrapper per funzioni i18n di Java, che è possibile utilizzare direttamente tra <% %>
.
si dovrebbe cercare di mantenere il vostro javascript codice in un file separato dal codice jsp. Ciò serve a ottenere il caching del browser, una manutenzione più semplice, il riutilizzo delle pagine e la compressione.
Ti suggerisco di creare un oggetto globale per il testo nel jsp, che verrà utilizzato dai file javascript. Come questo:
<script>
var text = text || {}; // play well with other jsps on the page
text.this_page_name = {
required_field_error: "<fmt:message key="required.field.error"/>",
system_error: "<fmt:message key="system.error"/>"
};
</script>
Più tardi lo si utilizza in Javascript:
alert(text.this_page_name.required_field_error);
Se il javascript è 'in linea' con il resto della pagina JSP, quindi è sufficiente utilizzare la tecnica suggerita da Kees de Kooter .
Se il tuo javascript deve essere in un file esterno (per la condivisione su pagine, per esempio), quindi semplicemente metterlo nel proprio file JSP.
<%@page contentType="text/javascript" %>
<fmt:message key="some.message" var="someMessage"/>"
<fmt:message key="another.message" var="anotherMessage"/>"
var someMessage = "${someMessage}"
var anotherMessage = "${anotherMessage}"/>"
e includerlo come questo ...
<script src="yourScript.jsp" language="JavaScript" type="text/javascript"></script>
È quindi possibile fare riferimento a 'someMessage' e 'anotherMessage' all'interno del file che include il JSP, o da qualsiasi file JavaScript che è incluso dopo 'yourScript.jsp.
Nota l'uso dell'attributo contentType - 'text/javascript' impedisce al parser JSP di lamentarsi del fatto che l'output non è ben formato XML - e che la tage fa riferimento a un file JSP.
Una combinazione di questa tecnica e quella suggerita da @Magner dovrebbe portare a una soluzione ragionevole.
MODIFICA: Modificato l'esempio per utilizzare 'text/javascript' come 'text/plain' - grazie a @bobince per avermi fatto capire questo errore (Anche se 'text/plain' funziona, è più corretto usare ' text/javascript '). Inoltre, se il numero di stringhe che devono essere internazionalizzate è piccolo, e/o puoi giustificare avere le tue "risorse" in più di un posto - uno per il lato server e un altro per il lato client roba - la tecnica di @ bobince di l'uso di include dinamici è buono.
è possibile trattare il file .js come file .jsp utilizzando la configurazione web.xml?
Sì:
<servlet>
<servlet-name>scriptjsp</servlet-name>
<jsp-file>/script.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>scriptjsp</servlet-name>
<url-pattern>/script.js</url-pattern>
</servlet-mapping>
Ma, non v'è alcun vantaggio reale in questo modo, perché i file JavaScript non devono avere gli URL che terminano in ‘js’. Ciò che determina se un file è un file JavaScript è il tipo di supporto MIME utilizzato. È possibile impostare questo da JSP utilizzando:
<%@ page contentType="text/javascript" %>
nella parte superiore. Poi si può collegare direttamente a:
<script type="text/javascript" src="/script.jsp"></script>
(A parte: nei browser attuali, gli script legati a con lo script <> tag funzionerà anche senza avere il Content-Type impostato correttamente, ma che non è probabilmente qualcosa a che fare affidamento su .)
voglio usare tag fmt di JSTL in javascript
Questo non è probabilmente una buona idea. Il tag fmt si occupa dell'escape HTML per i caratteri, ma ciò che si desidera è l'escape letterale stringa JavaScript, ad esempio per i caratteri di virgoletta con escape backslash. JSTL non fornisce questa funzionalità. I caratteri "& amp;" visualizzati in modo imprevisto vengono visualizzati nelle stringhe JavaScript e l'uso di apostrofo o virgolette nei messaggi interromperà l'intero script.
Inoltre, l'offerta di script inclusi di comune da JSP rischia di prestazioni e cacheing scadenti.
Suggerirei un sistema di ricerca lingua indipendente in JavaScript. Ad esempio, includere uno script esterno per-lingua:
<script type="text/javascript" src="/script/lang/en.js"></script>
(cambiando 'it' per indicare qualsiasi lingua che si desidera), e in quel file definire un riferimento come:
var msg= {
messageName: 'Message in English',
...
};
Poi guardare in alto msg.messageName
per ogni stringa localizzabile nello script.
grazie per la spiegazione. Viene pubblicato mentre è tornato, mi chiedo se posso chiedere come caricare il file js della lingua specifica nel jsp? Ad esempio, se ottengo le impostazioni internazionali e vorrei caricare solo i file js corrispondenti nel file jsp in modo che l'oggetto msg possa essere utilizzato in un altro file javascript? lang_xx.js potrebbe essere lang_en.js o lang_fr.js – lannyf
Vuoi dire '. js ">'? – bobince
grazie bobince. dovrebbe funzionare: in uno dei blocchi di script precedenti fare: quindi nella seguente sezione di script: . js ">. Non sono sicuro in JSP come fare riferimento alla variabile definita in altri blocchi di script, se in alcuni casi è necessario. – lannyf
Suggerisco di scrivere un servlet che genera un array o un oggetto javascript che contiene tutte le informazioni localizzate desiderate. È possibile utilizzare i pacchetti di risorse Java che possono essere condivisi sia dal lato client che dal lato server, quindi non è necessario mescolare codice JSP e codice Javascript e la risposta servlet verrà memorizzata nella cache dal browser.
Creare un servlet, associarlo a un percorso, farlo leggere il locale da un parametro di richiesta e generare il codice Javascript.
utilizzare una linea come <script src="/mydict?lang=en"></script>
allora si caricare lo script in seguito <script src="/myscript.js"></script>
Questa è una buona soluzione, dovrebbe essere classificato più in alto –
Se state andando solo per i messaggi di avviso basta usare questo tag nel tuo javascript
Supponiamo che avete seguito in Javascript:
alert("Confirm Deletion");
Questo può essere internazionalizzato aggiungendo il tag bean:message
nel javascript
alert('<bean:message key="msg.confirm"/>');
e aggiungere key
valore nel file di proprietà
msg.delete=Confirm Deletion
- 1. sul codice sorgente jsp
- 2. Oggetti JSP, JavaScript e Java
- 3. Ottenere valore jsp nel file javascript
- 4. Importazione e utilizzo del codice Groovy in GSP
- 5. Protezione/Protezione del codice in JavaScript
- 6. Utilizzo di Url.Action in javascript
- 7. Utilizzo del prototipo JavaScript - best practice
- 8. Utilizzo dell'API Alembic dall'interno del codice applicazione
- 9. Utilizzo del codice polimorfico per scopi legittimi?
- 10. Correttore di utilizzo del codice Java
- 11. Compilazione di array JavaScript dall'elenco JSP
- 12. Utilizzo dell'analizzatore di Rhino nel codice javascript per analizzare le stringhe in javascript
- 13. Utilizzo del server SignalR dal codice Python
- 14. Utilizzo del codice non gestito dal codice gestito
- 15. Ottieni l'indirizzo IP del client in JSP
- 16. Esecuzione Phantomjs da JavaScript, JSP o Java
- 17. Debug javascript nella pagina jsp con Chrome?
- 18. Passando variabile da JSP per Javascript
- 19. Lettura di una variabile JSP da JavaScript
- 20. Utilizzo del codice Go in un progetto C esistente
- 21. Utilizzo del codice Ruby/Python in un'app per iPhone OS?
- 22. Destroy session in JSP
- 23. Utilizzo dell'overflow del buffer per l'esecuzione del codice shell
- 24. L'errore Javascript interrompe l'esecuzione del codice
- 25. Catalogo vuoto per l'internazionalizzazione del codice JavaScript
- 26. Utilizzo dei parametri "Out" in JavaScript
- 27. Cosa attiva l'esecuzione del codice JavaScript?
- 28. Includere automaticamente un JSP in ogni JSP
- 29. Compilare JSP (controllare l'errore sintattico in JSP)
- 30. Ottimizzazione del codice Javascript per Find()
Ciò richiede che si in linea tutto il vostro javascript. Il javascript dovrebbe essere davvero separato nel proprio file, per la memorizzazione nella cache del browser, una manutenzione più semplice, il riutilizzo attraverso le pagine e per consentire la compressione. – Magnar
Quindi rendere il file javascript qualificato come JSP modificando il file web.xml predefinito. Quindi il file JS è entrambi, javascript AND JSP. L'estensione del file è semplicemente questa, un'estensione. Usa quello che vuoi. Funziona alla grande anche con i file CSS. –