viernes, 8 de mayo de 2009

Misterio de 5 minutos.

Ambiente: Aplicación web en Java y struts.

La excepción:

javax.servlet.jsp.JspException: Invalid argument looking up property: rol.tipoRol of bean: "org.apache.struts.taglib.html.BEAN"

Descripción.

Pues bueno resulta que haciendo unas pruebas aqui en el trabajo un amigo se encontró con el la excepción anterior mientras usaba una forma de struts del tipo RegistrarCedulaAF que contenía un objeto del tipo Rol que dentro de él contenía la propiedad tipoRol y la estaba usando en una etiqueta del jsp del siguiente modo:

<html:text property="rol.tipoRol" readonly="true"/>

Por supuesto que habíamos declarado la forma en el struts-config y todos los getters y setters se encontraban bien escritos, pero al momento de correr la prueba nos aparecía el misterioso mensaje anterior. Luego de unos minutos tratando de adivinar si nuestras clases tenían sus respectivos métodos de get y set bien construidos y descubrir que estaban como deberían de estar, tanto con las clases como con el archivo de struts-config de la aplicación y que todo estuviera en orden, estuvimos a punto de darnos por vencidos cuando descubrimos la causa del problema.

Resulta que la forma RegistrarCedulaAF se inicializaba correctamente, pero en ningún momento inicializamos su atritubo Rol por lo que éste se encontraba en null cuando la forma era creada por struts y al parecer struts no es tan listo como para diferenciar entre que queremos utilizar una propiedad de un objeto en null o que queremos buscar un atributo de la forma que no existe, por lo que envía un error de que no encuentra la propiedad rol.tipoRol en la forma, en lugar de mandarnos un mensaje de nullpointer excepcion (aunque a decir verdad no sé que tan dificil sea notar la diferencia entre estas dos situaciones.)

Para resolver el problema basta con tener inicializado el objeto Rol que pertenece a la forma en el momento de solicitar su propiedad tipoRol, de otra manera aparecerá el mensaje mencionado.

Esa fue la lección de hoy. Espero pronto poder escribir otra lección aprendida sobre struts y unos cambios en una forma que no son registrados mediante un html:link y javascript.

Saludos.

No hay comentarios:

Publicar un comentario