OpenJavaDay 26 y 27 de Junio

Java Sin comentarios

En javahispano han tenido la brillante idea de hacer una convención de desarrolladores java para desarrolladores java. Algo más interesante que ver transparencias en Powerpoint.

La idea es llevarse el portátil y probar los ejemplos/código in situ mientras el ponente nos guía. Me parece algo muy positivo hacer participativa la conferencia...

Lo difícil será llevar todo eso con dinamismo.

¡Una que se quiere apuntar!

Eclipse Ganymede M6

Eclipse, IDE Sin comentarios

Ya ha salido la Milestone 6 de Eclipse 3.4 (más conocido como Ganymede).

Aparte de haber cambiado un poco la interfaz, dónde está cada botoncito y pequeñas pijadas, lo que más he notado entre la M5 y la M6 es que la última tarda un siglo en arrancar.

Para más información y descargas: Sitio oficial Eclipse.org

Problema: Varios parámetros dentro de <s:url>

struts 2, tag 1 Comentario

[Nota: Este post requiere conocimientos de Struts 2 y tags. Para los que no sepáis estamos preparando un curso acelerado de Struts 2. ¡Próximamente!]

En ocasiones nos encontramos con que dentro de una etiqueta <s:url> tenemos que pasar varios parámetros que serán introducidos en la acción pertinente por medio de métodos setter.

Hay ciertas ocasiones en las que no se invocan algunos de estos métodos setter debido, principalmente, a un problema a la hora de escapar los ampersands (&) de la url que se genera. Cuando dentro de un jsp escribimos un texto similar a este:

<s:url action="Accion" id="idAccion">
   <s:param name="aaaa">
     <s:property value="nombre" />
   </s:param>
   <s:param name="bbbb" value="200" />
   <s:param name="cccc" value="150" />
</s:url>

Nos podemos encontrar con el problema de que sólo se llama a setAaaa() dentro de la acción Accion. ¿Por qué sucede esto? Porque al transformar ese código a url lo hace mal.

En lugar de transformarlo en:

http://www.example.com/Accion.do?aaaa=nombre&bbbb=200&cccc=150

Lo transforma en algo similar a esto. Por eso sólo coge bien el primer parámetro:

http://www.example.com/Accion.do?aaaa=nombre&amp;bbbb=200&amp;cccc=150

Esto, por supuesto, no pasa siempre, sólo en casos determinados como el siguiente:

<img src="<s:property value='%{idAccion}' />" alt="Descr"/>

Puede que no sea un buen ejemplo, pero precisamente el error venga dado por la forma en la que está escrita la anterior línea y sus comillas anidadas dentro de dobles comillas. Muchas veces eso simplifica el código para no tener que escribir varias líneas. Sin embargo puede hacer que se arrastren otros errores como el que acabo de comentar.

¿Y cuál es la solución? Pues muy sencillo, añadir la propiedad escapeAmp="false" a la etiqueta <s:url> de la siguiente manera:

<s:url action="Accion" id="idAccion" escapeAmp="false">
   <s:param name="aaaa">
     <s:property value="nombre" />
   </s:param>
   <s:param name="bbbb" value="200" />
   <s:param name="cccc" value="150" />
</s:url>

Así de sencillo.

NetBeans IDE 6.0

IDE, Java Sin comentarios

NetBeansYa ha sido lanzada la versión final 6.0 de NetBeans y está lista para su descarga gratuita desde la web de NetBeans.

Tenemos seis sabores para elegir (¿será casualidad?). Podemos bajarnos NetBeans con una de las opciones siguientes:

  • Web & Java EE
  • Mobility
  • Java SE
  • Ruby
  • C/C++
  • Completo: Con todo lo anterior

Yo voy a probar la primera (ya lleva un 85%) que además trae dos servidores incorporados: GlassFish V2 y el querido Tomcat 6.0.14. El primero no lo conozco, sinceramente.

También se pueden pedir gratis los DVDs desde la página.

Displaytag: para mostrar tablas (III)

Java, displaytag, tag 15 Comentarios

Para no alargarnos mucho, este será el último capítulo de DisplayTag. Para más información es conveniente ir a la página oficial de DisplayTag. Si tenéis más dudas podéis usar los comentarios.

Ya sólo quedan 2 conceptos básicos por ver, el primero es la paginación y el segundo es sobre qué puede iterar automáticamente DisplayTag.

Paginación

Cuando una consulta SQL nos devuelve muchos datos, podemos paginar los resultados. Hay 2 formas de hacerlo:

  • Usando offsets y sólo cogiendo la porción de datos necesaria desde la Base de Datos: Siempre que se pueda usar esta opción, especialmente si se recuperan muchos datos. Se hacen más consultas a la base de datos, pero evitamos tener cargadas en memoria todas las páginas
  • Diciéndole a DisplayTag cuántos elementos queremos que nos muestre por página añadiéndole el atributo pagesize a la etiqueta display: Aquí se tienen todas las páginas cargadas en memoria y DisplayTag nos genera la paginación (con su anterior, siguiente, número de páginas, etc.). Es muy cómodo, pero ojo con las consultas grandes.

Sobre el segundo punto veamos un ejemplo:

<display:table name="tabla" pagesize="25">
    <display:column property="usuario" title="Usuario" />
    <display:column property="mail" title="e-mail" />
    <display:column property="telefono" title="Tel&eacute;fono" />
</display:table>

De ésta manera, obtendremos una paginación transparente para nosotros, generada por DisplayTag.

Sobre qué puede iterar

DisplayTag, automáticamente puede generar tablas a partir de conjuntos de datos "iterables", como son:

  • Collection
  • Enumeration
  • Map (los valores se muestran en una fila)
  • Dictionary (los valores se muestran en una fila)
  • Array
  • Iterator
  • Cualquier objeto con un método iterator()
  • Cualquier objeto que se pueda mostrar en una fila

Lo anterior incluye, por tanto, una lista de beans con sus métodos getter y setter.

Si nos parece demasiado complejo crear todo esto para una simple tabla, siempre se puede tomar otra solución y utilizar JSTL o DynaBeans y así coger los datos directamente de la base de datos. Para saber más sobre ésto recomiendo visitar la página que trata sobre coger los datos directamente de la base de datos con DisplayTag.

Resumiendo...

Este tutorial sobre cómo usar las librería de tags DisplayTags para mostrar tablas de una forma sencilla se ha dividido en tres:
1.- Displaytag: para mostrar tablas (I)
2.- Displaytag: para mostrar tablas (II)
3.- Displaytag: para mostrar tablas (III)

Hemos podido ver:

  • Descarga e Instalación
  • Uso básico y personalización
  • Paginación
  • Elementos sobre los que iterar

Esperamos que os haya servido de ayuda. Para cualquier duda, ya sabéis, tenéis los comentarios.

Displaytag: para mostrar tablas (II)

Java, displaytag, tag 12 Comentarios

En el anterior capítulo (Displaytag: para mostrar tablas (I)) vimos una pequeña introducción a la librería de tags DisplayTag y una guía sencilla de instalación. En este post veremos algunos usos sencillos.

Uso básico

La forma más simple de utilizar DisplayTag es introduciendo en la request una lista que contenga los objetos sobre los que iterar y, posteriormente usar la etiqueta para mostrar el contenido de la lista. Las columnas no se nombran explícitamente. Con que haya métodos getter sobre los atributos sería suficiente.

Por ejemlo, pensemos que tenemos una lista llamada listaUsuarios que contiene cinco beans Usuario. Cada usuario tiene los atributos nombre, telefono y email. Después de cargar toda la lista con los beans, simplemente tenemos que hacer lo siguiente en nuestro .jsp:

<% request.setAttribute( "lista", listaUsuarios)); %>
<display:table name="lista" />

El resultado será una tabla con una fila por cada usuario. La tabla estará bien formada, con sus elementos thead y tfoot, sus filas y sus columnas, como se muestra abajo (los estilos CSS sólo están para que se vea mejor la tabla, más adelante se verá cómo cambiarlos):

Nombre Email Telefono
Usuario1 email1@test.es 123456789
Usuario2 email2@test.es 123456789
Usuario3 email3@test.es 123456789
Usuario4 email4@test.es 123456789
Usuario5 email5@test.es 123456789

Si quisiéramos variar el órden de las columnas, ponerle otros nombres en la cabecera, cambiar los estilos o lo que sea, tendremos que utilizar más funcionalidades de la librería.

Columnas y títulos

Si en nuestro ejemplo queremos que salga primero el nombre, luego el teléfono y después el e-mail y, además, queremos que ponga "Nombre de usuario" en lugar de "Nombre", y "correo electrónico" en lugar de "Email", tendremos que añadir el orden de las columnas y los títulos al .jsp de la siguiente forma:

<display:table name="lista" />
     <display:column property="nombre" title="Nombre de usuario" />
     <display:column property="telefono" title="Teléfono" />
     <display:column property="email" title="Correo electrónico" />
</display:table>

Ahora la tabla se mostraría así:

Nombre de usuario Teléfono Correo electrónico
Usuario1 123456789 email1@test.es
Usuario2 123456789 email1@test.es
Usuario3 123456789 email1@test.es
Usuario4 123456789 email1@test.es
Usuario5 123456789 email1@test.es

Estilos

Aplicaremos estilos CSS a la tabla para que quede como nosotros queremos. DisplayTag le pone clases CSS automáticamente a algunos elementos para que se muestren en HTML. Los estilos que nos da son:

  • odd: Asignado a tr de las filas impares
  • even: Asignado a tr de las filas pares
  • sorted: Asignado a la th de la columna
  • order1: Asignado al th de la columna si su orden es ascendente
  • order2: Asignado al th de la columna si su orden es descendente
  • sortable: Asignado al th tag de una columna si se puede ordenar por ella (pinchando en ella)

Por ejemplo, si queremos que nuestra tabla se parezca a las anteriores, que salgan distintos colores para filas pares e impares y que la cabecera tenga fondo azul y letra blanca, incluiremos el siguiente código en nuestro CSS:

thead tr {
    background-color: #0A3C68;
    color: #FFFFFF;
    font-size: 11px;
}
.odd {
    background-color:#CCCCCC;
}
.even {
    background-color:#EEEEEE;
}

Podremos personalizar nuestras tablas para que se asemejen al layout de una página web en concreto o para que su lectura sea más clara. Sólo hace falta un poco de gusto para dejar una tabla bonita con DisplayTag.

En el próximo capítulo veremos la paginación y más usos: Ir a siguiente capítulo

Displaytag: para mostrar tablas (I)

Java, displaytag, tag 5 Comentarios

Una forma sencilla de mostrar elementos tabulados provenientes, por ejemplo, de una base de datos, es crear scriptlets (código java dentro de una página jsp) e iterar con un resultset de la forma:

while (result.next()) {
    // Tratar los datos como se quiera, por ejemplo
    out.println(result.getString("num_factura"));
}

Esto puede parecer sencillo al principio, pero al final se puede convertir en una auténtica pesadilla. No sólo por el tiempo que se pierde escribiendo el código entre etiquetas html y molestos <% %>, sino porque lo verdaderamente complicado de este método es mantener el código. Es decir, modificarlo y añadir nuevas funcionalidades.

Aquí viene en nuestra ayuda una fantástica solución: La librería de tags DisplayTag. Se trata de una solución MVC (modelo vista-controlador) en la cual nosotros importamos la librería de tags en el jsp que vayamos a usar y, simplemente usamos la etiqueta <display:> y sus subetiquetas. Esto lo explicaremos en próximos capítulos.

Instalación

Lo primero es instalar la librería en nuestro proyecto. Para ello vamos a la página oficial de descargas de displaytag (en sourceforge) y nos descargamos una versión de DisplayTag. Actualmente la última versión es la 1.1.1.

Dentro de los binarios tenemos 3 librerías .jar:

displaytag-1.1.jar Taglib principal
displaytag-export-poi-1.1.jar Módulo para exportar a excel (usa la API Jakarta POI)
displaytag-portlet-1.1.jar Para usar JSR-168 portals

Para lo que nos ocupa sólo usaremos la primera. Añadimos el .jar a nuestro proyecto como más nos guste. Una forma (no la única y tampoco la mejor) es:

  • Añadir displaytag-x.x.jar a la carpeta WEB-INF/lib del proyecto.
  • Añadir las dependencias de esta librería (a descargar desde la página de Apache):
    • commons-lang
    • commons-collections
    • commons-beanutils
  • Es probable (dependiendo de qué se use) que también necesitemos:
    • commons-logging
    • log4j
    • itext (sólo si usamos la exportación Excel o PDF)

Una vez hecho esto, ya tenemos instalado DisplayTag. Para comenzar a utilizarlo tendremos que incluir la siguiente línea en nuestra página JSP:

<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>

En el próximo capítulo veremos el uso básico de la librería: Ir a siguiente capítulo

¡Mudanzas!

Lapsos Sin comentarios

Si estás buscando el contenido anterior de LAPSOS sigue este link hacia www.lapsos.es Sí, aún siguen existiendo las diarreas mentales de Lapsos...

A partir de ahora LAPSOS.com contendrá "Perlas de JAVA". ¿Qué significa eso? Pues pequeños tutoriales en castellano, ayudas, trozos de código para que insertes en tus proyectos, noticias, novedades y toda la información que sea de interés general en el mundillo JAVA (habitualmente en entorno Web).

Por supuesto, a los autores de lapsos.com nos gustaría contar con ayuda externa, comentarios, mini-tutoriales y críticas. Cualquier apasionado de Java es bienvenido.