lunes, 30 de junio de 2008

i18n Internacionalización en jsp con etiquetas

La internacionalización se emplea para realizar traducciones de partes de la web en determinados idiomas, dependiendo de donde sea el usuario que accede a la misma, teniendo una por defecto y otra(s) determinada(s) por el diseño de desarrollo.

Para realizar el proceso de internacionalización necesitamos incluir en el pom.xml (del proyecto que estemos tratando, en mi caso el de ayer: eticom-discografica-servlet-JSTL),
la dependencia 'standar-1.1.2.jar' (en mi caso ya la añadimos ayer).

Los distintos idiomas que vamos a emplear se crean a partir de distintos ficheros con distintas traducciones, teniendo uno por defecto (Nombre.properties), que normalmente es en inglés, y luego los concretos, cuyo nombre es igual pero con el distintivo del idioma: Nombre_en.properties (inglés), Nombre_es.properties (español), etc. Estos archivos van situados en el source folder 'src/main/resources'.

En mi caso he creado 3 files: Discografica.properties (por defecto),
Discografica_es.properties y Discografica_en.properties, en las que he inlcuido las claves y sus correspondientes traducciones.

Ahora realizo la importación de la librería 'fmt' en la página .jsp que quiera, yo lo hago en index.jsp:

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

Seguidamente cargo el archivo de traducciones, el cual hay que cargar una vez por cada página .jsp:

<fmt:setBundle basename="Discografica"/>

Para mostrar las traducciones:

<h2><fmt:message key="hola"/></h2>
<h2><fmt:message key="webmaster"/></h2>

Hay que tener muy en cuenta, que para no tener que cargar las traducciones en cada una de las páginas jsp, hay que indicar las traducciones en el archivo 'web.xml' añadiendole este código:

<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>Discografica</param-value>
</context-param>

El resultado del web.xml.

enlaces: foro.

JSTL y etiquetas personalizadas

JSTL (JavaServer Pages Standard Tag Library): sirve para separar en un JSP, el código java del código de representación.

Partiendo del proyecto del viernes (eticom-discografica-servlet), vamos a modificarlo empleando etiquetas personalizadas, que son etiquetas de uso parecido a las etiquetas HTML para la representación de datos en el archivo jsp (Servlet). Este proyecto es el "
eticom-discografica-servlet-JSTL".
Lo primero que haremos será crear una nueva dependencia (Maven/add dependency):



Ahora hacemos una clase (SimpleTag.java) que extienda de TagSupport.
Implemento los métodos 'doStartTag' y 'doEndTag', a través de la ruta menú Contextual/source/Override/Implements Methods. Esta clase va a servir para representar su contenido con un formato determinado, en este caso vamos a aplicarle color a un texto. La clase queda así: SimpleTag.java. Como se puede ver, se han implementado los getter y setter de los atributos (color y mensaje).

Después creamos el TLD (Tag Library Descriptor), es decir, el archivo librería donde vamos a describir las etiquetas que vamos a usar. Así pues, creamos una carpeta llamada TLD en la carpeta WEB-INF de nuestro proyecto, y dentro de ella el archivo 'simple.tld'. El resultado de este archivo es este: simple.tld.

Ahora tenemos que definir las librerías de etiquetas en el archivo web.xml. Incluimos la creada anteriormente (simple.tld). El archivo queda así: web.xml (solo hemos añadido la etiqueta jsp-config, lo demás estaba ya).

Finalmente importamos la librería en nuestro archivo JSP. Esto es lo que hay que incluir:


...yo lo añado en mi 'index.jsp'. uri="/simple" indica el lugar donde está la librería, y prefix="ex" indica que las etiquetas que comiencen con ex pertenecen a 'simple.tld'. Podíamos haber puesto cualquier otro prefijo. Si en la etiqueta donde he puesto el colo y el mensaje (ex:simpleTag color="red" mensaje="discografia con TLDs") no pongo el atributo mensaje, me sale el mensaje por defecto, que es el que pusimos en la clase SimpleTag.java, en mi caso "Hola bola Tag!!!". Igual ocurre con el color, que en la clase tengo por defecto el color negro, por lo que si omito el atributo color a la etiqueta, en vez del color que pongamos en la etiqueta, aparecerá el color por defecto.

Ahora arrancamos el servidor jetty ejecutamos en la barra de direcciones del navegador la direccion http://localhost:8080/ y vemos que nos sale el texto "discografica con TLDs" en rojo.


-------------------

Ahora vamos a crear otra etiqueta dentro del simple.tld, para lo cual tenemos que crear otra clase (ImgTag.java). Luego en simple.tld, creamos otra etiqueta 'tag' de nombre 'imgTag'. Ya en el archivo jsp, creamos otra etiqueta, en este caso etiqueta imgTag: --ex:imgTag url="http://www.....jpg"--

-------------------

Para poder utilizar librerías estandars (incluídas en la especificación de JSP) vamos a incluir una nueva dependencia en pom.xml: el 'taglibs standard' version 1.1.2.
Estas librerías estandars son:
  • core: para iteraciones, condicionales, manipulación de URLs y otras funciones generales.
  • xml: para la manipulación de XML y para XML-Transformation.
  • sql: para gestionar conexiones a bases de datos.
  • i18n: para la internacionalización y formateo de las cadenas de caracteres como cifras.
  • fn:
Una vez añadida la dependencia, y dentro del JSP, podemos hacer referencia a las librerías a través de los imports:

<%@taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>

<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

<%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>

<%@taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>

Para ver ejemplos relacionados con la librería 'core', pincha en el ejemplo index.jsp.

Enlaces de interés: Librerías de etiquetas, JSTL

viernes, 27 de junio de 2008

Instalacion de eclipse jee y plugins

Para instalar el eclipse JEE, lo descargo de algunos de los espejos de la web. Una vez descargado lo descomprimo y lo renombro como 'eclipseJEE' para que no coincida con la versión de eclipse clásico, y lo coloco en Archivos de Programa. Ejecuto el archivo 'eclipse.exe'.

Me pide que seleccione un Workspace. Selecciono el mismo que tengo, esto es, 'C:\Workspace'.


Ahora voy a instalar los plugins siguiendo la ruta
eclipse>Help>software updates...>find and install >search for new fetures for install> new remote site:
  • Subversion
    • name:svn-subclipse
    • url: http://subclipse.tigris.org/update_1.4.x
  • TestNG
    • name:testng
    • url:http://beust.com/eclipse
  • MAVEN
    • name: maven-m2eclipse
    • url:http://m2eclipse.sonatype.org/update/

martes, 17 de junio de 2008

Desarrollo de modulo Maven para hacer 'mailing'

Hoy vamos a crear un módulo Maven para realizar un envío de correo electrónico basándonos en 4 parámetros de datos:
  • String cuentaGmailRemitente
  • String claveGmailRemitente
  • String destinatario
  • String mensaje
Para ello debemos implementar una interfaz (llamada ServicioMail), que contiene un método al que se le pasan los 4 parámetros anteriores. La interfaz la implementamos a través de la clase 'ServicioMailImpl'.

Todos estos pasos están perfectamente explicados aquí (si quieres más información teórica pincha aquí).

Ahora vamos a implementar el módulo anterior dentro de un servlet (http://localhost:8080/olvidoClave), para que, a través de un formulario, nos pida la dirección de correo electrónico (textfield) y podamos enviarlo (mediante un boton -enviarClave-). Una vez enviado nos manda a otro servlet (
http://localhost:8080/envioClave).

jueves, 12 de junio de 2008

Seguimos con Maven

En eclipse, nos bajamos del repositorio el proyecto ServletEticom y después, menú contextual sobre el archivo "pom.xml/run as/Maven build...". En 'goals' escribimos "jetty:run". Veremos en consola que se inicia una aplicación web que se descarga Maven a tavés del servidor "jetty". Si abrimos en un navegador la dirección "http://localhost:8080", veremos que se ha creado una página web.
Es definitiva, que con la orden jetty:run, le estamos diciendo que a través del servidor jetty, corra el archivo pom.xml en un navegador.

Como decía ayer,
POM las iniciales de "Project Object Model", es un archivo XML en el que se definen las configuraciones del proyecto, desarrolladores que participaran, los roles de los desarrolladores, la organización, licencias, la URL, las dependencias/librerías. (info oficial de pom.xml).
Si abrimos ese archivo pom.xml, vemos como, en la primera línea, aparece su version y su encoding. Si queremos que eclipse pueda validarnos el documento hay que indicar el Schema dentro de la etiqueta proyect...

xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd"

Este tipo de archivos se puede ser validado por DTD (descripción de estructura y sintaxis de un documento XML, que es en texto plano) o mediante un schema (también XML).

Si queremos crear un proyecto Maven desde eclipse, File/new/project/en wizards buscamos maven y seleccionamos Maven Project. 3 veces siguiente y..
Group Id: eticom
Artifact Id: ejemplo (es el nombre del proyecto, si Maven ve que el proyecto es dependiente de otro, lo añade como dependencia)
Version: 0.0.1-SNAPSHOOT