Erro com TagFile

[quote=zepunk]Olá pessoal estou com probleminha aqui em um parametro da minha tagFile.

Eu criei uma jsp e quando eu mando imprir o código do meu objeto, ele imprime normal ex:

${empresa.status.id}

esta linha de código imprime o número 1, corretamente.

Depois eu chamo umas tagFile minha ex.:

<cmbStatus:gerarCombo  valorDefault="1" nome="empresa.status.id" />

Até aqui sem problemas, ele gera uma combo com o item 1 selecionado.

agora quando eu passo o retorno do meu objeto para minha tagFile, da erro. ex.:

<cmbStatus:gerarCombo  valorDefault="${empresa.status.id}" nome="empresa.status.id" />

Não sei o que fazer, pois quando eu fasso os testes com o retorno dos meus objetos ele da erro, lembrando que os tipos dos são iguais.

segue o erro

[code]type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: /empresa/load.ok.jsp(14,3) According to TLD or attribute directive in tag file, attribute valorDefault does not accept any expressions
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:71)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

org.apache.jasper.JasperException: /empresa/load.ok.jsp(14,3) According to TLD or attribute directive in tag file, attribute valorDefault does not accept any expressions
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:405)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:146)
org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:955)
org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:710)
org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1441)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2213)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2219)
org.apache.jasper.compiler.Node$Root.accept(Node.java:456)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
org.apache.jasper.compiler.Validator.validate(Validator.java:1489)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:157)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:267)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:255)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:293)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.vraptor.view.RegexViewManager.directForward(RegexViewManager.java:61)
org.vraptor.view.RegexViewManager.forward(RegexViewManager.java:53)
org.vraptor.interceptor.ViewInterceptor.intercept(ViewInterceptor.java:36)
org.vraptor.core.BasicLogicFlow.execute(BasicLogicFlow.java:98)
org.vraptor.interceptor.OutjectionInterceptor.intercept(OutjectionInterceptor.java:49)
org.vraptor.core.BasicLogicFlow.execute(BasicLogicFlow.java:98)
org.vraptor.interceptor.ExecuteLogicInterceptor.intercept(ExecuteLogicInterceptor.java:62)
org.vraptor.core.BasicLogicFlow.execute(BasicLogicFlow.java:98)
org.vraptor.interceptor.SettingAndValidationInterceptor.intercept(SettingAndValidationInterceptor.java:92)
org.vraptor.core.BasicLogicFlow.execute(BasicLogicFlow.java:98)
org.vraptor.interceptor.InjectionInterceptor.intercept(InjectionInterceptor.java:49)
org.vraptor.core.BasicLogicFlow.execute(BasicLogicFlow.java:98)
org.vraptor.interceptor.ComponentLookupInterceptor.intercept(ComponentLookupInterceptor.java:33)
org.vraptor.core.BasicLogicFlow.execute(BasicLogicFlow.java:98)
org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:70)
org.vraptor.core.VRaptorController.execute(VRaptorController.java:72)
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:56)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.12 logs.
Apache Tomcat/5.5.12[/code][/quote]

parece que o problema esta na definição da tua Tag File …
pode colocar o cabeçalho dela aqui pra nois?

package br.com.conseda.taglib;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

import org.hibernate.Session;

import br.com.conseda.DAO.EmpresaDAO;
import br.com.conseda.factory.ConnectionFactory;
import br.com.conseda.modelo.empresa.Empresa;

public class ComboEmpresa extends TagSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 6776224940174259770L;

	protected String nome;

	protected String classStyle;

	protected String style;

	protected Long valorDefault;

	public String getClassStyle() {
		return classStyle;
	}

	public void setClassStyle(String classStyle) {
		this.classStyle = classStyle;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getStyle() {
		return style;
	}

	public void setStyle(String style) {
		this.style = style;
	}

	public Long getValorDefault() {
		return valorDefault;
	}

	public void setValorDefault(Long valorDefault) {
		this.valorDefault = valorDefault;
	}

	
	public int doStartTag() throws JspException {
		
		JspWriter out = pageContext.getOut();
		
		try {
			
			out.println("<select name=\"" + this.nome + "\" class=\"" + this.classStyle + "\" style=\"" + this.style + "\">");
			out.println("	<option value=\"\">Selecione</option>");
			
			//Pega uma sessão do valida
			Session session = new ConnectionFactory().getSession();
			
			//Estancia um objeto DAO empresa
			EmpresaDAO dao = new EmpresaDAO(session);
			
			//Percorre todos os objetos listados
			for(Empresa empresa: dao.listaTudo()) {
				
				//Verifica se o id informado é igual ao do objeto atual
				//e marca como selecionado
				if(empresa.getId() == this.valorDefault) {
					
					out.println("<option selected value=\"" + empresa.getId() + "\">" + empresa.getNome() + "</option>");
					
				}else {
					out.println("<option value=\"" + empresa.getId() + "\">" + empresa.getNome() + "</option>");
				}
				
			}
			
			out.println("</select>");
			
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return SKIP_BODY;		
	}

	public int doEndTag()
	{
		return EVAL_PAGE;
	}
	
}

bom, isto não é uma tagfile.
tagfile é um arquivo .tag que se usa a mesma sintaxe do JSP :smiley:

neste caso preciso é do teu TLD pra saber o motivo daquele erro :smiley:

ops… .heheh
desculpa a gaf…

<?xml version="1.0"?>
<!DOCTYPE taglib PUBLIC 
			"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
			"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
	<tlibversion>1.0</tlibversion>
	<jspversion>1.1</jspversion>
	<shortname>comboEmpresa</shortname>
	<uri>http://bdvl.conseda.com.br/jstl/Empresa</uri>
	<info>Combo de Empresas</info>
	<tag>
		<name>gerarCombo</name>
		<tagclass>br.com.conseda.taglib.ComboEmpresa</tagclass>
		<attribute>
			<name>nome</name>
			<required>no</required>
		</attribute>
		<attribute>
			<name>classStyle</name>
			<required>no</required>
		</attribute>
		<attribute>
			<name>style</name>
			<required>no</required>
		</attribute>
		<attribute>
			<name>valorDefault</name>
			<required>no</required>
		</attribute>
	</tag>
</taglib>

seguinte, paece que o problema é:
o teu web.xml ta informando que tu vai usar j2ee 2.4
a tua taglib é versão 1.1

de vez em quando da conflito deste tipo :smiley:
tem uma solução absurda que as vezes funciona …

na declaração na JSP do
<%@ taglib prefix="" uri="" %>

troca a ordem do prefix e da URI

se isto não funcionar, muda o DTD do teu TLD pra este: http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd

que é o DTD para taglibs compativeis com JSP 2.0 :smiley:

Puts cara o erro ainda continua, quando passo o valor na mão ele vai, mas quando passo o objeto ele continua com o erro.

Isto da erro

<cmbStatus:gerarCombo valorDefault="${empresa.ativo.id}" nome="empresa.ativo.id" classStyle="" style="WIDTH: 130px"/>

isto não dá

<cmbStatus:gerarCombo valorDefault="1" nome="empresa.ativo.id" classStyle="" style="WIDTH: 130px"/>

Porém o valor de ${empresa.ativo.id} esta retornando 1.

alterei o cabeçalho da minha jsp como indicado

<%@ taglib prefix="cmbStatus" uri="http://bdvl.conseda.com.br/jstl/Status" %>

alterei a DTD da minha tld

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
  "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>1.2</jsp-version>
    .
    .
    .

E não fasso idéia do que fazer para resolver este problema.

Erro.

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: /empresa/load.ok.jsp(14,3) According to TLD or attribute directive in tag file, attribute valorDefault does not accept any expressions
	org.vraptor.VRaptorServlet.service(VRaptorServlet.java:71)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

org.apache.jasper.JasperException: /empresa/load.ok.jsp(14,3) According to TLD or attribute directive in tag file, attribute valorDefault does not accept any expressions
	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)
	org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:405)
	org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:146)
	org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:955)
	org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:710)
	org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1441)
	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
	org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2213)
	org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2219)
	org.apache.jasper.compiler.Node$Root.accept(Node.java:456)
	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
	org.apache.jasper.compiler.Validator.validate(Validator.java:1489)
	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:157)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:267)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:255)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:293)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.vraptor.view.RegexViewManager.directForward(RegexViewManager.java:61)
	org.vraptor.view.RegexViewManager.forward(RegexViewManager.java:53)
	org.vraptor.interceptor.ViewInterceptor.intercept(ViewInterceptor.java:36)
	org.vraptor.core.BasicLogicFlow.execute(BasicLogicFlow.java:98)
	org.vraptor.interceptor.OutjectionInterceptor.intercept(OutjectionInterceptor.java:49)
	org.vraptor.core.BasicLogicFlow.execute(BasicLogicFlow.java:98)
	org.vraptor.interceptor.ExecuteLogicInterceptor.intercept(ExecuteLogicInterceptor.java:62)
	org.vraptor.core.BasicLogicFlow.execute(BasicLogicFlow.java:98)
	org.vraptor.interceptor.SettingAndValidationInterceptor.intercept(SettingAndValidationInterceptor.java:92)
	org.vraptor.core.BasicLogicFlow.execute(BasicLogicFlow.java:98)
	org.vraptor.interceptor.InjectionInterceptor.intercept(InjectionInterceptor.java:49)
	org.vraptor.core.BasicLogicFlow.execute(BasicLogicFlow.java:98)
	org.vraptor.interceptor.ComponentLookupInterceptor.intercept(ComponentLookupInterceptor.java:33)
	org.vraptor.core.BasicLogicFlow.execute(BasicLogicFlow.java:98)
	org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:70)
	org.vraptor.core.VRaptorController.execute(VRaptorController.java:72)
	org.vraptor.VRaptorServlet.service(VRaptorServlet.java:56)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.12 logs.
Apache Tomcat/5.5.12

Ta fogo… ehehehe

tenta limpar o cache do tomcat :smiley:

Puts…
ta treta não funciona de maneira alguma.
alguém tem mais alguma sujestão ??

Abrigado.

Essa seria a minha sugestao tambem. Apaga o diretorio work/org do seu projeto e tenta denovo.

Fora isso, o erro é claro: seu atributo valorDefault não aceita expressões do tipo expression language.

Note que o valor passado que funciona não é EL e o que não funciona é EL. Por exemplo: valorDefault="${1}" não vai funcionar.

O que fazer então?

  1. Verificar que o web.xml realmente diz estar usando servlet api 2.4.
  2. Se nao me engano, no tld voce pode falar quais atributos aceitam EL e quais nao (aprendi pra certificacao mas nao lembro), da uma olhada na especificacao de JSP que com certeza vai te falar isso…

Opá, muito obrigado pela ajuda olhei a especificação e tem uma tag na tld que indica que não haverá validação em runtime

<rtexprvalue>true</rtexprvalue>

Além de ter uma tag que indica qual o tipo do atributo

<type>java.util.Date</type>

Obrigado pela atenção.

Ola…
apesar do tópico ser antigo…
eu estava com o mesmo problema…
soh q no meu caso estou a utilizar JEE 5…

nao tive q alterar nada no meu web.xml nem em tld…

na declaracao do meu jsp ao inves de
<%@ taglib prefix=“c” uri=“http://java.sun.com/jstl/core” %>

aterar para…
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

Humbertim2

Eu tava com esse probleminha agorinha e mais uma vez, atravez de GUJ e da ajuda do pessoal consegui resolver também.

Obrigado a todos.

Abraços