Tag Customizada

14 respostas
C

Olá pessoal!

Estou desenvolvendo minha própria tag. E ela não está aceitando delimitadores (Expression Language) gostaria que vocês me ajudassem segue a seguir o código.

Classe Taglib

package br.com.tpd.taglib;

import java.io.IOException;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

import br.com.tpd.to.UsuarioTO;

public class TaglibGrid extends SimpleTagSupport{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private List listaUsuario;
	

	public List getListaUsuario() {
		return listaUsuario;
	}



	public void setListaUsuario(List listaUsuario) {
		this.listaUsuario = listaUsuario;
	}
	
	public void doTag() throws JspException, IOException {
		
		if(listaUsuario.size() > 0){
			Collections.sort(listaUsuario, UsuarioTO.ORDER_BY_NOME);
		}
		
		//StringBuffer sb = new StringBuffer();
		Iterator<UsuarioTO> it = listaUsuario.iterator();
		while (it.hasNext()) {
			UsuarioTO usuarioTO = (UsuarioTO) it.next();
			/**sb.append("<label for='" + usuarioTO.getNome() + "'>"
					+ usuarioTO.getNome() + "</label>");
			sb.append("<label for='" + usuarioTO.getCpf() + "'>"
					+ usuarioTO.getCpf() + "</label>");*/
				//getJspContext().setAttribute("usuario", usuarioTO);
			getJspBody().invoke(null);		
		}
	}

	
}

TLD

<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">

	<tlibversion>1.0</tlibversion>
	<jspversion>1.1</jspversion>
	<shortname>MinhasTags</shortname>
	<info>Minhas Tag's Customizadas</info>

	<tag>
		<name>gridCustomizado</name>
		<tagclass>br.com.tpd.taglib.TaglibGrid</tagclass>
		<body-content>scriptless</body-content>
		<attribute>
			<name>listaUsuario</name>
			<type>java.util.List</type>
			<rtexprvalue>true</rtexprvalue>
			<required>true</required>			
		</attribute>		
	</tag>
</taglib>

JSP

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://tpd.com.br/gridCustomizado" prefix="teste"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Lista de Usuarios</title>
</head>
<body>
	<form>
	  <table>
	  		<tr>
	  			<td>
	  				Nome
	  			</td>
	  			<td>
	  				CPF
	  			</td>
	  		</tr>
	  		
	  	<teste:gridCustomizado listaUsuario="${UsuarioForm.listaUsuarioTO}"/>
	  </table>
	</form>
</body>
</html>

Erro

org.apache.jasper.JasperException: Unable to convert string "${UsuarioForm.listaUsuarioTO}" to class "java.util.List" for attribute "listaUsuario": Property Editor not registered with the PropertyEditorManager at org.apache.jasper.runtime.JspRuntimeLibrary.getValueFromPropertyEditorManager(JspRuntimeLibrary.java:884) at org.apache.jsp.pages.listarUsuarios_jsp._jspx_meth_teste_005fgridCustomizado_005f0(listarUsuarios_jsp.java:114) at org.apache.jsp.pages.listarUsuarios_jsp._jspService(listarUsuarios_jsp.java:83) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)

14 Respostas

C

Posso estar errado, mas você não deveria utilizar listaUsuario="#{UsuarioForm.listaUsuarioTO}" ao invés de listaUsuario="${UsuarioForm.listaUsuarioTO}"
E essa sua dúvida seria melhor respondida se fosse postada na área de Java para Web :stuck_out_tongue:

C

Estou usando struts não JSF…

Mas alguma sujestão…

C

Estava editando o post, já ia colocar o seguinte:

Desculpe meu erro. Dei uma olhada aqui num texto sobre JSP e realmente possui a forma ${}. Eu que nunca utilzei nada dessa forma. Mas dando uma olhada no seu código, se ${} utilizar da mesma forma que #{}, não possui objeto listaUsuarioTO na classe UsuarioForm, mas sim um objeto listaUsuario.

C

Então o nome da variavel do form não influi no nome da minha tag, ou seja, isso não é problema.

C

Resolvido!

Não pode conter…

<body-content>scriptless</body-content>

… no TLD

Isto diz que a tag pode ter um corpo, mas que o corpo não pode ter scripts (scriptles, expressões de scripts ou declarações).

Valeu pela atenção! :wink:

C

O que posso usar para que a expressão ${} funcione??? :cry:

C

O seu problema não é a EL e sim seus objetos, qual objeto retorna o atributo listaUsuarioTO do objeto UsuarioForm?

C

O seu problema não é a EL e sim seus objetos, qual objeto retorna o atributo listaUsuarioTO do objeto UsuarioForm?

O atributo listaUsuarioTO foi populado pela minha action e atribuida ao UsuarioForm.

Quando uso o codigo:

<c:forEach var="usuario" items="${UsuarioForm.listaUsuarioTO}"
...

Ele funciona perfeitamente, porem quando uso em minha tag customizada ele nao consegue entender como uma EL ele pensa como se fosse uma string. Estou usando a versao do tomcat 5.5.23 e o servlet 2.4.
Nao sei mais o que fazer, alguem tem uma solucao? :oops:

C

Era pra funcionar. Apague a pasta work do seu Tomcat e do seu projeto e compile as classes novamente.

C

Você diz apagar o conteúdo dela ou a pasta mesmo?

Obs: Não contém nenhum arquivo dentro desta pasta.

C

Problema resolvido!

Adicionei o seguinte código em minha aplicação:

<%@ page isELIgnored="false" %>

E funcionou!

C

Então se você precisou fazer isso no seu deployment descriptor tem um <jsp-config> com o <el-ignored>true</el-ignored> não é?!

C

Olhei o meu deployment descriptor e não encontrei essa configuração não, você sabe qual é o valor default?

C

Apenas adicionei isso no meu web.xml e não precisei colocar nenhuma configuração no meu jsp.

Antes estava assim:

&lt;web-app&gt; ...

E agora está assim:

&lt;web-app xmlns="http&#58;//java.sun.com/xml/ns/j2ee"
         xmlns&#58;xsi="http&#58;//www.w3.org/2001/XMLSchema-instance"
         xsi&#58;schemaLocation="http&#58;//java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
		 http&#58;//java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
         version="2.4"&gt;

Obrigada pela ajuda de todos …

Criado 5 de julho de 2007
Ultima resposta 6 de jul. de 2007
Respostas 14
Participantes 3