"<c:out" retorna o endereço ao invés da String

3 respostas
H

Olá,

Estou desenvolvendo uma aplicação com JSP, usando a JSTL. Eu criei um Java Bean e estou tentando passar uma propriedade dele como parametro para uma folha de estilo XSLT. Não está dando certo. Inspecionando o valor da propriedade, descobri que ela esta voltando o que acho ser o endereco de memória da String, algo como “[Ljava.lang.String;@b4e29b”, e não o valor da String.

Estou usando Eclipse J2EE com Tomcat 6.0 embutido. O código do bean vai abaixo, sendo que ele já rodou sem problemas. Ou foi alguma alteração que eu fiz e que está escapando ou não sei.

public class DadosDePaginaDeIndice implements Serializable {
	private String campo = Campos.DESCRITORES_LINHA, 
				comecaCom = "";  
	private int pagina = 1;
	private IndiceDescricoes indice = new IndiceDescricoes();
	
	public void setCampo(String campo) {
		if (!UteisString.nulo(campo))
			this.campo = campo; 
	}

	public String getCampo() {
		return campo;
	}

	public void setComecaCom(String comecaCom) {
		if (comecaCom != null)
			this.comecaCom = comecaCom;
	}

	public String getComecaCom() {
		return comecaCom;
	}

	public void setPagina(int pagina) {
		if (pagina >= 1)
			this.pagina = pagina;
	}
	
	public int getPagina() {
		return pagina;
	}

	public Document getDados() {
		return indice.listar(campo, pagina, comecaCom);
	}
	
}

A propriedade que está dando pau é a “campo”. O mais curioso é que “comecaCom” também é String mas funciona sem problemas. A seguir vai o codigo JSP:

<% 
Reader estilo = new InputStreamReader(new FileInputStream(
		new File(application.getRealPath("/xslt"), "indice.xsl")), "UTF-8");
request.setAttribute("_estilo", estilo);
%> 

<jsp:useBean id="indice" class="org.lucca.ajax.beans.DadosDePaginaDeIndice">
	<jsp:setProperty name="indice" property="*"/> 
</jsp:useBean>

<x:transform doc="${indice.dados}" xslt="${_estilo}">
	<x:param name="campo" value="${indice.campo}"></x:param>
	<x:param name="pagina" value="${indice.pagina}"></x:param>
	<x:param name="comecaCom" value="${indice.comecaCom}"></x:param>
</x:transform>

Obrigado pela ajuda,

Hel_all

3 Respostas

Ataxexe

Provavelmente o valor de Campos.DESCRITORES_LINHA é um toString de um array de Strings. Dê uma olhada nele.

H

Não. Se eu substituo “Campos.DESCRITORES_LINHA” por um valor String fixo como “XXXXXX” o erro permanece.

H

Consegui resolver o problema, e ele não estava nem perto de onde eu pensava. Em algum lugar do código eu estava fazendo:

<c:set var="parametros" value="${pageContext.request.parameterMap}" scope="request"/>

E depois criando um link para uma função do Ajax. Os parametros da função são repassados num GET:

<a href="#" onclick="carregarIndice('${parametros.campo}', 1, null)">

Aí é que esta o erro: depois de muito penar, vi que “parametros.campo” é um array de Strings, e por isso estava dando erro. O erro está em retornar aquele valor java.Lang.String… etc, que era passado adiante pelas páginas. Isso foi discutido no Forum do Guj: http://www.guj.com.br/java/9770-requestgetparametermap.

Para corrigir o problema, substitui o “parametros.campo” por “parametros.campo[0]”, e o sistema voltou a funcionar.

Queria agradecer aos que leram o post, na tentativa de ajudar.

Abraços,

Hel_all

Criado 1 de agosto de 2011
Ultima resposta 3 de ago. de 2011
Respostas 3
Participantes 2