Tag customizada

3 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() &gt 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

&lt?xml version="1.0" encoding="ISO-8859-1" ?&gt 
<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)

3 Respostas

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:

R

Estou tendo o mesmo problema mas com a seguinte tag

<%@ attribute name="inputPessoaBean"  type="br.com.bradesco.web.cbcd.view.tag.InputPessoa" required="true" rtexprvalue="true" %>

esta linha acima é o codigo do arquivo inputPessoa.tag guardada em WEB-INF/tags

e na jsp:

<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>

<tags:inputPessoa inputPessoaBean="#{miniXBean.pessoa}"/>

miniXBean é um bean (de teste) que retorna uma instancia de InputPessoa

seguindo o conceito do arquivo
Tomcat 5.5\webapps\examples\WEB-INF\tags\panel.tag

Quem puder ajudar… obrigado.

R

consegui algum resultado utilizando

<tags:inputPessoa inputPessoaBean="${miniXBean.pessoa}"/>

(Sinal de $ no lugar do #)

Criado 5 de julho de 2007
Ultima resposta 27 de nov. de 2011
Respostas 3
Participantes 2