Ajuda (Criação de taglib)

0 respostas
I

Estou com um erro na crição de uma taglib e ficaria agradecido se alguem pudesse me dar uma ajuda.
Estou lendo um tutorial sobre taglib e fazendo um testes. Fui fazer um teste para criar uma tab lib de iteração chamada iterate para funcionar de forma similar a da iterate do struts. Escrevi a seguinte classe para a tag lib:

package tag;

import ....
...
...

public class IterateTag implements BodyTag{
	
	Tag parent;
	PageContext pageContext;
	BodyContent bodyContent;
	Collection collection;
	Iterator iterator;
	String id;
	String name;
	
	public IterateTag( ){
	}
	
	public int doStartTag( ){
		collection = (Collection)pageContext.getRequest( ).getAttribute( name );
		if( collection == null ) return SKIP_BODY;
		return EVAL_BODY_INCLUDE;
	}
	
	public void doInitBody( ){
		Object object;
		iterator = collection.iterator( );
		if( iterator.hasNext( ) ){
			object = iterator.next( );
			pageContext.getRequest( ).setAttribute( id, object );
		}
	}
	
	public int doAfterBody( ){
		Object object;
		if( iterator.hasNext( ) ){
			object = iterator.next( );
			pageContext.getRequest( ).setAttribute( id, object );
			return EVAL_BODY_AGAIN;
		}
		else{
			return SKIP_BODY;
		}
	}
	
	public int doEndTag( ){
		return EVAL_PAGE;
	}
	
	public void release( ){
		/*Object obj = pageContext.getRequest( ).getAttribute( id );
		if( obj != null ){
			pageContext.getRequest( ).removeAttribute( id );
		}*/
	}
	
	public void setId( String id ){
		this.id = id;
	}
	
	public String getId( ){
		return id;
	}
	
	public void setName( String name ){
		this.name = name;
	}
	
	public String getName( ){
		return name;
	}
	
	public void setParent( Tag parent ){
		this.parent = parent;
	}
	
	public void setBodyContent( BodyContent bodyContent ){
		this.bodyContent = bodyContent;
	}
	
	public void setPageContext( PageContext pageContext ){
		this.pageContext = pageContext;
	}
	
	public Tag getParent( ){
		return parent;
	}

}

Criei o arquivo tld:

~<?xml version="1.0" encoding="ISO-8859-1"?>

<taglib>

	<tlibversion>1.0</tlibversion>
	<jspversion>1.1</jspversion>
	<shortname>hbo</shortname>
	<uri>mytag</uri>
	<info>My Tag</info>

	<tag>
		<name>iterate</name>
		<tagclass>tag.IterateTag</tagclass>
		<bodycontent>jsp</bodycontent>
		<info>Iteração para uma Collection</info>
		<attribute>
			<name>id</name>
			<required>true</required>
			<rtexprvalue>false</rtexprvalue>
		</attribute>
		<attribute>
			<name>name</name>
			<required>true</required>
			<rtexprvalue>false</rtexprvalue>
		</attribute>
	</tag>
</taglib>

Mapeei no arquivo xml da aplicação o meu arquivo taglib normal com a uri "mytag".

Aí criei uma página jsp para fazer um teste, que recebe uma collection de usuários (tipo User que criei) na request e exibe o conteúdo em uma tabela:

<%@page contentType="text/html; charset=ISO-8859-1"%>
<%@taglib uri="mytag" prefix="hbo"%>

<html>

	<head><title>TesteTagLib</title>
	</head>

	<body>
		<table>
			<hbo:iterate id="user" name="usuarios">
				<tr>
					<td><jsp:getProperty name="user" property="login"/></td>
					<td><jsp:getProperty name="user" property="password"/></td>
				</tr>
			</hbo:iterate>
		</table>
	</body>

</html>

A intenção aqui é dada a collection que está na request (como "usuarios") a tag realiza a iteração dessa collection e a cada iteração
ela coloca o objeto no contexto de request como "user" para eu poder utilizá-lo com getProperty.

Quando eu executo ele exibe a seguinte mensagem: "Attempted a bean operation on a null object"

Pelo que eu entendi ele está tentando pegar um bean ("user") que está nulo quando executa a tag getProperty.

Já verifiquei e a collection ("usuarios") está vindo certo na request, então creio que o problema seja com a minha tag.

Só para esclarecer, a minha classe bean do tipo User contém os métodos getters e setters no padrão para eu poder utilizar getProperty (atributos privados "login" e "password" e métodos "getLogin", "getPassword", "setLogin" e "setPassword").

Já verifiquei várias vezes e não consegui encontrar o erro. Como estou começando agora com taglibs acredito que eu esteja cometendo um erro besta e alguém mais experientes possa me ajudar.

obrigado

Criado 28 de outubro de 2008
Respostas 0
Participantes 1