sábado, 29 de octubre de 2011

Configurar formato UTF-8 para todos los ficheros en eclipse (jsp, html, java, properties...)

Para asegurar que todo nuestro código está en UTF-8, aquí dejo cómo configurar:

  • eclipse

  • workspace concreto


Eclipse
Hace tiempo encontré una opción para el fichero eclipse.ini que me ha ahorrado muchos problemas de codificación y que fija por defecto la codificación en UTF-8.
En el fichero eclipse.ini añadimos esta línea:
-Dfile.encoding=utf8

Lo que hace es que por defecto nuestro eclipse fije a utf-8 la codificación de los workspaces que creemos, y la mayoría de los ficheros también se traten en UTF-8.

Workspace
La configuración anterior hay que combinarla configurando alguna cosa más en el workspace.

1. Entramos en el menú Window > Preferences

2. En el espacio de búsqueda ponemos "encoding". Entre los resultados, nos interesa seleccionar General > Content Types.

3. Veremos entonces a la derecha varias opciones, y seleccionamos Text. En ese momento, seleccionado Text, en la parte de abajo tenemos una caja de texto con título "Default encoding", lo rellenamos con UTF-8 y finalmente pulsamos en el botón Update.



4. Después desplegamos esa opción Text, y vamos una a una por las opciones internas, algunas de ellas tienen fijado otro valor diferente a UTF-8, y lo que haremos es cambiarlo.

Con esto haremos que todos los ficheros que manejemos con eclipse, se traten como UTF-8.

OJO: Si el proyecto es nuevo, todo irá como la seda, pero si estáis importando un fichero con ficheros que estaban en otra codificación, no es solución suficiente, ya que eclipse no cambia la codificación física de los ficheros existentes con estas configuraciones. Para esta tarea de transformar ficheros de otra codificación hacia UTF-8... no he encontrado nada por ahí automático, y siempre he utilizado herramientas tan básicas como Notepad++, en el que desde su menú Codificación, puedes seleccionar Convertir a UTF-8.

viernes, 18 de marzo de 2011

Problema con templates javascript #{...} en JSP

Trabajando con Tomcat 6 y jsp, me he encontrado con un problema cuando intento utilizar plantillas (templates) para utilizar desde la parte de javascript con jQuery o Prototype.

La sintaxis para utilizar estos templates tiene esta forma #{...}, pero al compilar las JSPs que tienen estos templates en su contenido, Tomcat arroja esta excepción:
(...)

org.apache.jasper.JasperException: /WEB-INF/jsp/home.jsp(45,5) #{..} no está permitido en texto de plantilla
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:102)
at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:706)
at org.apache.jasper.compiler.Node$ELExpression.accept(Node.java:958)

(...)

Buscando por el problema en Internet, la mejor solución que he encontrado es añadir en la JSP la siguiente sentencia:

<%@page deferredSyntaxAllowedAsLiteral="true"%>


En mi caso lo he incluido justo después de declarar las taglib que utilizo, quedando así:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"
%><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"
%><%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"
%><%@ taglib prefix="spring" uri="http://www.springframework.org/tags"
%><%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json"
%><%
/*Para evitar error #{..} is not allowed in template text  */
%><%@page deferredSyntaxAllowedAsLiteral="true"%>

Página donde encontré finalmente la mejor solución: http://mail-archives.apache.org/...

Espero que os sirva.