Software con descuentos!

martes, noviembre 29, 2005

Acentos en Seaside

Seaside es un poderoso framework para desarrollar aplicaciones web en Squeak.

Actualmente estoy desarrollando una interfaz web para una aplicación desktop existente, cuyos datos residen en MS SQL Server.

Es la primera que desarrollo en Squeak 3.8 (ya que las anteriores fueron con Squeak 3.7). A partir de Squeak 3.8 ya no es necesario enviar los mensajes #squeakToIso o #isoToSqueak para hacer la conversión de caracteres acentuados o especiales del idioma español, sin embargo Seaside (hablamos de versiones 2.5a o superiores) mostraba mal dichos caracteres.

Haciendo un poco de investigación en la lista de Seaside y con unas pruebas, aparecen dos opciones para solucionar este problema:

1) La manera "rápida y sucia"

Desde la versión 2.5a4/25a5 de Seaside ya no existe el prólogo XML y en su lugar el charset es fijado en un header Content-Type. Esto se encuentra en WAResponse>>initialize, de la siguiente manera:

contentType := 'text/html; charset=utf-8'

y lo debemos reemplazar por esta línea:

contentType := 'text/html; charset=iso-5589-2'

La desventaja de esta solución es que implica tocar una clase de Seaside (subclasificarla sería bastante complejo) y debemos recordar hacerlo en cada nueva imagen donde querramos usar nuestro código.

2) Una forma más prolija

Todos subclasificamos WASession para establecer nuestro modelo, entonces se puede sobreescribir el método #respond de la siguiente manera:

respond: aBlock
| resp |
^ super respond:
[:url |
resp := aBlock value: url.
resp contentType: 'text/html; charset=iso-5589-2'.
resp]

Ambos métodos fueron testeados y funcionan perfectamente, usando una imagen Squeak 3.8 #6665 y Seaside 2.5b8.