Foreign key com Displaytag

7 respostas
mslopes

Pessoal, venho aqui mais uma vez para pedir ajuda a vocês.

Estou usando Displaytag para paginar uma consulta. Está funcionando perfeitamente.
O problema é que a tabela em que consulto possui uma foreign key idDestino e a displaytag mostra o id e não o nome do destino (que está em outra tabela).
Gostaria de saber como que posso fazer para mostrar o nome do destino.

Já tentei inner join no sql e não consegui. Utilizo hibernate no meu projeto.

Por acaso tem algum jeito de buscar o nome do destino e mostrar ele no lugar do id?

Agradeço deste já.

7 Respostas

Hebert_Coelho

Como você está buscando atualmente?

mslopes
no listar.jsp eu estou usando o displaytag assim:
<display:table name="listar" pagesize="10" requestURI="default.jsp">
		<display:column property="nome" title="Nome"/>
		<display:column property="idDestino" title="Destino"/>
		<display:column property="dataHora" title="Data/Hora"/>
		<display:column property="previsaoFim" title="Previsão de retorno"/>
		<display:column property="observacao" title="Observação"/>
	</display:table>
Quando eu uso o SQL desse jeito
Query query = session.createQuery("FROM Usuario ORDER BY nome ASC");
Ele me retorna certinho na displaytag mais se eu tento algo como
Query query = session.createSQLQuery("SELECT u.nome, d.nomeDestino FROM Usuario u inner join Destino d on u.idDestino = d.idDestino ORDER BY nome ASC");
Ele me retorna o seguinte erro:
java.lang.NoSuchMethodException: Unknown property 'nome'

Só que não consegui achar aonde da o erro ainda.

Antes, eu usava o seguinte:
<table class="lista" cellpadding="10" cellspacing="1" width="100%">
	<tr>
		<td>Nome</td>
		<td>Destino</td>
		<td>Data/Hora</td>
		<td>Previsão de término</td>
		<td>Observação</td>
		<td>Excluir</td>
	<tr>
		
<% List<Usuario> usuario = (List<Usuario>)request.getAttribute("listar");
List<Destino> destino = (List<Destino>)request.getAttribute("combo");

DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm");

for (Usuario u : usuario){ %>
	<tr class="dif">
		<td><%=u.getNome()%></td>
		<td><%=destino.get(u.getIdDestino()-1).getNomeDestino()%></td>
		<td><%=df.format(u.getDataHora())%></td>
		<td><%=df.format(u.getPrevisaoFim())%></td>
		<td align="justify">     <%=u.getObservacao()%></td>
		&lt;td&gt;&lt;center&gt;<a  >&lt;input type="image" src="images/excluir.gif"&gt;</a>&lt;/center&gt;&lt;/td&gt;
	&lt;/tr&gt;
&lt;% } %&gt;
&lt;/table&gt;

Funciona perfeitamente, só que não tem paginação e estou precisando da paginação.

Hebert_Coelho

Sua classe usuário tem get/set nome?

Unknown property ‘nome’

mslopes
Meu Usuario.java
package modelo;

import java.util.Date;

// Arquivo responsável por declarar as variáveis de usuario utilizadas no sistema
public class Usuario {
	
	private int idUsuario;
	private int idDestino;
	private String nome;
	private Date dataHora;
	private Date previsaoFim;
	private String observacao;
	
	public Usuario() {};
	
	public Usuario(int idUsuario, int idDestino, String nome, Date dataHora,
			Date previsaoFim, String observacao) {
		super();
		this.idUsuario = idUsuario;
		this.idDestino = idDestino;
		this.nome = nome;
		this.dataHora = dataHora;
		this.previsaoFim = previsaoFim;
		this.observacao = observacao;
	}

	public int getIdUsuario() {
		return idUsuario;
	}

	public void setIdUsuario(int idUsuario) {
		this.idUsuario = idUsuario;
	}

	public int getIdDestino() {
		return idDestino;
	}

	public void setIdDestino(int idDestino) {
		this.idDestino = idDestino;
	}

	public String getNome() {
		return nome;
	}

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

	public Date getDataHora() {
		return dataHora;
	}

	public void setDataHora(Date dataHora) {
		this.dataHora = dataHora;
	}

	public Date getPrevisaoFim() {
		return previsaoFim;
	}

	public void setPrevisaoFim(Date previsaoFim) {
		this.previsaoFim = previsaoFim;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}
	
}
Hebert_Coelho

E como você mapeou no xml?

Você mapeou essa classe?

Se sim, tenta trocar seu sql por:
ORDER BY u.nome ASC

Hebert_Coelho

Outra coisa, o erro: java.lang.NoSuchMethodException: Unknown property ‘nome’

vem após a consulta ou vem na hora de exibir os dados na tela?

mslopes
Meu usuario.xml:
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;

&lt;!-- ARQUIVO RESPONSÁVEL PELA CONEXÃO COM A TABELA Usuario DO BD --&gt;
&lt;hibernate-mapping package="modelo"&gt;
&lt;class name="Usuario" table="Usuario"&gt;

&lt;!-- Identificador da classe --&gt;
	&lt;id column="idUsuario" name="idUsuario" type="integer"&gt;
		&lt;generator class="identity"&gt;&lt;/generator&gt;
	&lt;/id&gt;

&lt;!-- Propriedades da classe --&gt;
	&lt;property name="idDestino"/&gt;
	&lt;property name="nome"/&gt;	
	&lt;property name="dataHora" type="timestamp"/&gt;	
	&lt;property name="previsaoFim" type="timestamp"/&gt;
	&lt;property name="observacao" type="text"&gt;
	&lt;/property&gt;

&lt;/class&gt;
&lt;/hibernate-mapping&gt;

E eu já tentei trocar por order by u.nome mais também não surtiu efeito.
Se entendi bem, ele vem na hora de exibir os dados na tela.

Segue o erro completo, talvez pra você que entende de java faça a diferença (ainda não aprendi a interpretar o relatório de erros por completo).

Fev 03, 2012 1:25:27 PM org.apache.catalina.core.ApplicationDispatcher invoke
Grave: Servlet.service() for servlet jsp threw exception
java.lang.NoSuchMethodException: Unknown property 'nome'
	at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1122)
	at org.apache.commons.beanutils.PropertyUtils.getSimpleProperty(PropertyUtils.java:408)
	at org.displaytag.util.LookupUtil.getProperty(LookupUtil.java:271)
	at org.displaytag.util.LookupUtil.getBeanProperty(LookupUtil.java:129)
	at org.displaytag.model.Column.getValue(Column.java:124)
	at org.displaytag.model.Column.createChoppedAndLinkedValue(Column.java:201)
	at org.displaytag.model.Column.initialize(Column.java:178)
	at org.displaytag.render.TableWriterTemplate.writeTableBody(TableWriterTemplate.java:313)
	at org.displaytag.render.TableWriterTemplate.writeTable(TableWriterTemplate.java:138)
	at org.displaytag.render.HtmlTableWriter.writeTable(HtmlTableWriter.java:734)
	at org.displaytag.tags.TableTag.writeHTMLData(TableTag.java:1647)
	at org.displaytag.tags.TableTag.doEndTag(TableTag.java:1300)
	at org.apache.jsp.listar_jsp._jspx_meth_display_005ftable_005f0(listar_jsp.java:179)
	at org.apache.jsp.listar_jsp._jspService(listar_jsp.java:109)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
	at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
	at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
	at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
	at org.apache.jsp.index_jsp._jspService(index_jsp.java:196)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
	at controle.ListarServlet.doService(ListarServlet.java:50)
	at controle.ListarServlet.doGet(ListarServlet.java:27)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
	at org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:709)
	at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:680)
	at org.apache.jsp.default_jsp._jspService(default_jsp.java:64)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)
Criado 3 de fevereiro de 2012
Ultima resposta 3 de fev. de 2012
Respostas 7
Participantes 2