Quiero utilizar la etiqueta fmt de JSTL en JavaScript para localizar mis mensajes de alerta. Mi archivo JavaScript es un archivo independiente y cuando incluyo la etiqueta fmt en js, el buscador de archivos da errores de JavaScript. ¿Es posible tratar el archivo .js
como archivos .jsp
usando la configuración web.xml? ¿Alguien puede sugerir por favor cómo puedo hacer eso?Uso del código JSP en JavaScript
Respuesta
Puede hacer lo siguiente. Almacena el mensaje traducido en una variable que se puede resolver más adelante en el JSP.
<fmt:message key="your.alert" var="theAlert"/>
<script type="text/javascript">
alert("${theAlert}");
</script>
No puede utilizar etiquetas en JavaScript, pero hay una solución: poner la etiqueta en un oculto DIV
(<div style="display: none;" id="msg"><fmt:...>
Ahora puede utilizar JS para buscar el DIV
por su ID y obtener el . innerHTML
dicho esto, FMT es sólo un envoltorio para las funciones de i18n de Java que se puede utilizar directamente entre <% %>
.
usted debe esforzarse para mantener su javascript código en un archivo separado del código jsp. Esto es para obtener el almacenamiento en caché del navegador, facilitar el mantenimiento, reutilizar en todas las páginas y permitir la compresión.
Sugiero que cree un objeto global para texto en el jsp, para ser utilizado por sus archivos javascript. De esta manera:
<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>
tarde que lo utilice en su javascript:
alert(text.this_page_name.required_field_error);
Si el Javascript es 'en línea' con el resto de la página JSP, a continuación, sólo tiene que utilizar la técnica sugerida por Kees de Kooter .
Si su javascript necesita estar en un archivo externo (para compartir entre páginas, por ejemplo), simplemente colóquelo en su propio archivo 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 incluirlo como esto ...
<script src="yourScript.jsp" language="JavaScript" type="text/javascript"></script>
A continuación, puede referirse a 'someMessage' y 'anotherMessage' desde dentro del archivo que incluye la JSP, o de cualquier archivo javascript que es incluido después de 'yourScript.jsp.
Tenga en cuenta que el uso del atributo contentType - 'text/javascript' evita que el analizador JSP se queje de que el resultado no está bien formado XML - y que el tage se refiere a un archivo JSP.
Una combinación de esta técnica y la sugerida por @Magner debería brindarle una solución sensata.
EDIT: Cambié el ejemplo para usar 'text/javascript' inserta de 'text/plain' - gracias a @bobince por hacerme cargo de este error (Aunque 'text/plain' funciona, es más correcto usar ' texto/javascript '). Además, si el número de cadenas que se deben internacionalizar es pequeño, y/o puede justificar tener sus 'recursos' en más de un lugar, uno para el lado del servidor y otro para el lado del cliente, la técnica de @bobince usar Dynamic includes es bueno.
¿es posible tratar el archivo .js como archivo .jsp usando la configuración 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>
embargo, no hay ninguna ventaja real en hacer esto, ya que los archivos de JavaScript no tiene que tener las URL que terminan en ‘js’. Lo que determina si un archivo es un archivo JavaScript es qué tipo de medio MIME se sirve. Puede configurar esto desde JSP usando:
<%@ page contentType="text/javascript" %>
en la parte superior. A continuación, puede vincular directamente a:
<script type="text/javascript" src="/script.jsp"></script>
(Aparte: en los navegadores actuales, guiones vinculados con el guión <> etiqueta funcionará incluso sin tener el Content-Type configurado correctamente, pero eso no es probablemente algo que depender de .)
quiero usar la etiqueta de FMT JSTL en javascript
Esto probablemente no es una buena idea. La etiqueta fmt trata sobre el escape de HTML para caracteres, pero lo que usted quiere es un escape literal de cadena de JavaScript, por ejemplo, para caracteres de comillas invertidas-escape. JSTL no proporciona esta capacidad. Obtendrá caracteres '& amp;' inesperadamente escapados que aparecerán en sus cadenas de JavaScript, y el uso de apóstrofos o comillas dobles en los mensajes romperá todo el script.
Además, el servicio de scripts comúnmente incluidos de JSP puede reducir el rendimiento y el almacenamiento en caché.
Sugeriría un sistema de búsqueda de idiomas independiente en JavaScript. Por ejemplo, incluir un script externa per-idioma:
<script type="text/javascript" src="/script/lang/en.js"></script>
(cambiando 'es' para que coincida con el idioma que desee), y en ese archivo definir una búsqueda, tal como:
var msg= {
messageName: 'Message in English',
...
};
A continuación, busque msg.messageName
para cada cadena localizable en el script.
gracias por la explicación. Se publicó en la parte de atrás, ¿me pregunto si puedo preguntar cómo cargar el archivo js del idioma específico en el jsp? es decir, si obtengo la configuración regional y me gustaría cargar solo las js correspondientes en el archivo jsp para que el objeto msg pueda usarse en otro archivo javascript? lang_xx.js podría ser lang_en.js o lang_fr.js – lannyf
Quieres decir '. js ">'? – bobince
gracias Bobince. funcionaría esto: en un bloque de script anterior do: luego en la siguiente sección de scripts: . js ">. No estoy seguro en JSP de cómo referir la var definida en otro bloque de script si en algún caso lo necesita. – lannyf
Le sugiero que escriba un servlet que genere una matriz o un objeto javascript que contenga toda la información localizada que desee. Puede usar paquetes de recursos de Java que pueden ser compartidos tanto por el cliente como por el servidor, luego no tiene que entremezclar el código JSP y el código de Javascript, y el navegador va a almacenar en caché la respuesta al servlet.
Crear un servlet, asignarlo a una ruta, leer la configuración regional desde un parámetro de solicitud y luego generar el código JavaScript.
Utilice una línea como <script src="/mydict?lang=en"></script>
entonces cargar la escritura después <script src="/myscript.js"></script>
Esta es una buena solución, debería ser clasificado más alto. –
Si va sólo para los mensajes de alerta sólo tiene que utilizar esta etiqueta en su Javascript
Supongamos que dispone de los siguientes en su Javascript:
alert("Confirm Deletion");
Esto se puede internacionalizar agregando la etiqueta bean:message
en su javascript
alert('<bean:message key="msg.confirm"/>');
y añadir valor en key
archivo de propiedades
msg.delete=Confirm Deletion
- 1. ¿Cómo minimizar/ofuscar código JavaScript en un JSP que tiene variables JSP/JSTL mezcladas en él?
- 2. Uso de JavaScript dentro de una etiqueta JSP
- 3. Paso del parámetro sin uso de formularios HTML en JSP
- 4. Uso de expresiones regulares en JSP EL
- 5. JSP, JavaScript y objetos Java
- 6. sobre el código fuente jsp
- 7. Código Uso del bloque {} en bash
- 8. Uso del código no administrado del código administrado
- 9. Excluir un JSP del código de seguridad de web.xml
- 10. ¿Cuál es el uso del uso de init() en JavaScript?
- 11. Importación de JavaScript en las etiquetas JSP
- 12. ¿Cómo puedo detectar el código muerto en un proyecto de Java empresarial (Java + JSP + Javascript)?
- 13. ¿Cómo evitar el uso de scriptlets en mi página JSP?
- 14. ¿Cómo puedo acceder a las variables de JavaScript en JSP?
- 15. redirigir jsp del servlet RequestDispatcher
- 16. Lectura de una variable JSP desde JavaScript
- 17. ¿Este código javascript depende del navegador?
- 18. ¿Qué desencadena la ejecución del código JavaScript?
- 19. Código ayudar en la vista (JSP/jstl) para los objetos del modelo Spring MVC en Eclipse
- 20. Asignar JavaScript variable en variable de Java en JSP
- 21. JSP que muestra el código fuente en lugar de ejecutar
- 22. Marcando "uso de ejemplo" en la documentación del código
- 23. Rellenar la matriz de JavaScript de la lista JSP
- 24. visualización del resultado del servlet en la página jsp
- 25. Cadenas de concatenación en JSF/JSP EL y Javascript
- 26. Incluye automáticamente un JSP en cada JSP
- 27. Práctica recomendada de Javascript: manejo del código específico de Firebug
- 28. Url absoluta en jsp
- 29. Nombre de idioma del código ISO 639-1 en Javascript
- 30. Obteniendo el valor de retorno del código Javascript en Selenium
Esto requiere que toda su línea de javascript. El javascript realmente debe estar separado en su propio archivo, para el almacenamiento en caché del navegador, mantenimiento más fácil, reutilización en todas las páginas y para permitir la compresión. – Magnar
Luego, haga que el archivo javascript califique como JSP ajustando su archivo web.xml predeterminado. Entonces el archivo JS es ambos, JavaScript y JSP. La extensión del archivo es simplemente eso, una extensión. Usa lo que quieras Funciona muy bien con archivos CSS también. –