Boa tarde galera galera, já não se mais o que fazer.
Estou implementando uma funcionalidade em um sistema antigo, e está dando um erro que nãio sei mais o que possa ser.
O sistema utiliza servlets, jsp, displayTag, hibernate com anotações.
Estou querendo buscar as UFS das cidades através do servlet abaixo, só que quando vai ser mostrado no displayTag, ele informa que a Property “uf.sigla” não existe.
Só que ela existe. Vocês podem me dar uma ajuda? realmente não sei mais o que fazer. Em outros servlets existem funcionalidades parecidas com está e estão funcionando.
Abaixo as classes que são utilizadas nessa consulta.
Desde já agradeço e descupa o topico extenso.
Servlet: ListaCidades
public class ListaCidades extends HttpServlet {
static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher view = request.getRequestDispatcher("adminCidades.jsp");
Cidades cidades = new Cidades();
String sortDirection = null;
String sortField = null;
Integer page = 1;
if (request.getParameter("sort") != null) {
sortField = request.getParameter("sort");
cidades.setSortCriterion(sortField);
}
if (request.getParameter("dir") != null) {
sortDirection = request.getParameter("dir");
if (sortDirection.equalsIgnoreCase("ASC")) {
cidades.setSortOrder(SortOrderEnum.ASCENDING);
} else if (sortDirection.equalsIgnoreCase("DESC")) {
cidades.setSortOrder(SortOrderEnum.DESCENDING);
}
}
if (request.getParameter("page") != null) {
page = new Integer(request.getParameter("page"));
cidades.setPageNumber(page);
}
final CidadeDAO dao = new CidadeDAO();
//request.getParameterNames();
cidades.setFullListSize(dao.getCidadesCount());
final List<Cidade> cidade = dao.listCidade(
cidades.getObjectsPerPage(),
cidades.getPageNumber(),
cidades.getSortCriterion(),
sortDirection);
//para verificar se está trazendo corretamente os dados da cidade
for (Iterator<Cidade> it = cidade.iterator(); it.hasNext();) {
Cidade cidade1 = it.next();
System.out.println(cidade1.toString());
}
cidades.setCidades(cidade);
request.setAttribute("lista", cidades);
view.forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
metodo que lista as cidades
public class CidadeDAO {
/**
*
*/
private EntityManager manager = DatabaseManageSingleton.getInstancia().getManager();
public List<Cidade> listCidade(final Integer pageSize, final Integer pageNumber, String fieldSorted, String sortOrder) {
if (fieldSorted == null || fieldSorted.length() == 0) {
fieldSorted = "nome";
}
if (sortOrder == null) {
sortOrder = "DESC";
} else if (!sortOrder.equalsIgnoreCase("ASC") && !sortOrder.equalsIgnoreCase("DESC")) {
sortOrder = "DESC";
}
Query query = manager.createQuery("SELECT c FROM Cidade c ORDER BY c." + fieldSorted + " " + sortOrder);
query.setFirstResult((pageNumber - 1) * pageSize);
query.setMaxResults(pageSize);
return query.getResultList();
}
}
Modelo: Cidade
@Entity
public class Cidade {
/**
* Identificador
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
/**
* Código do IBGE
*/
private int codigo;
/**
* Nome do município
*/
private String nome;
/**
*
*/
private String nomeAlterado;
@ManyToOne(cascade = {CascadeType.PERSIST})
@JoinColumn(name = "uf_id")
private UF uf;
/**
* Construtor padrão da classe
*/
public Cidade() {
}
/**
*
* @param codigo Código do IBGE
* @param nome Nome da cidade
* @param nomeAlterado
* @param uf
*/
public Cidade(int codigo, String nome, String nomeAlterado, UF uf) {
this.codigo = codigo;
this.nome = nome;
this.nomeAlterado = nomeAlterado;
this.uf = uf;
}
public Cidade(String nome, int codigo, UF uf) {
this.nome = nome;
this.codigo = codigo;
this.uf = uf;
}
/**
*
* @return
*/
public int getCodigo() {
return codigo;
}
/**
*
* @param codigo
*/
public void setCodigo(int codigo) {
this.codigo = codigo;
}
/**
* Obtém o nome da cidade
* @return Nome da cidade
*/
public String getNome() {
return nome;
}
/**
* Define o nome da cidade
* @param nome Nome da cidade
*/
public void setNome(String nome) {
this.nome = nome;
}
/**
*
* @return
*/
public String getNomeAlterado() {
return nomeAlterado;
}
/**
*
* @param nomeAlterado
*/
public void setNomeAlterado(String nomeAlterado) {
this.nomeAlterado = nomeAlterado;
}
/**
* Obtém a UF que a cidade pertence
* @return UF
*/
public UF getUF() {
return uf;
}
/**
* Define a UF que a cidade pertence
* @param uf UF
*/
public void setUF(UF uf) {
this.uf = uf;
}
/**
* Obtém o identificador da cidade
* @return Identificador
*/
public int getId() {
return id;
}
public String toString(){
String dados = "UF: " + this.uf.getSigla() + " Cidade: " + this.nome;
return dados;
}
}
Modelo: UF
@Entity
public class UF implements Serializable {
/**
* Número serial
*/
private static final long serialVersionUID = 3746737942450745630L;
/**
* Identificador único da UF
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
/**
* Sigla
*/
private String sigla;
/**
* Cidades que pertencem a UF
*/
@OneToMany(mappedBy = "uf")
private List<Cidade> cidades = new ArrayList<Cidade>();
/**
* Construtor padrão da classe
*/
public UF() {
}
/**
*
* @param sigla
*/
public UF(String sigla) {
//super();
this.sigla = sigla;
}
/**
*
* @return
*/
public String getSigla() {
return sigla;
}
/**
*
* @param sigla
*/
public void setSigla(String sigla) {
this.sigla = sigla;
}
/**
* Obtém a lista de cidades que pertencem a UF
* @return Lista de cidades
*/
public List<Cidade> getCidades() {
return cidades;
}
/**
* Define as cidades que fazem parte da UF
* @param Lista de cidades
*/
public void setCidades(List<Cidade> cidades) {
this.cidades = cidades;
}
/**
* Obtém o identificador
* @return Identificador
*/
public int getId() {
return id;
}
}
JSP que lista as cidades
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://displaytag.org" prefix="display" %>
<h1>Lista de Cidades</h1>
<span id="novos"><a href="CadastroCidade.do">Cadastrar Cidade</a></span>
<display:table name="lista" sort="list" requestURI="ListaCidades.do" id="row">
<display:column property="uf.sigla" title="uf" sortable="false" />
<display:column property="nome" title="NOME" sortable="true" />
<display:column property="codigo" title="CODIGO" sortable="true" />
<display:column title="OPERAÇÕES" class="center" headerClass="center">
<a href="servelt?id=<c:out value="${row.id}" />"><img src="img/edit_icon.png" title="Editar" /></a>
<a href="servlet?id=<c:out value="${row.id}" />" onclick="if (confirm('Você tem certeza que deseja excluir esta unidade de saúde?')) { f = document.createElement('form'); document.body.appendChild(f); f.method = 'POST'; f.action = this.href; f.submit(); };return false;"><img src="img/delete_icon.png" title="Excluir" /></a>
</display:column>
</display:table>
O Erro
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: Exception: [.LookupUtil] Error looking up property "uf.sigla" in object type "smsjp.cais.modelo.Cidade". Cause: Unknown property 'uf'
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
smsjp.cais.logica.cidade.ListaCidades.doPost(ListaCidades.java:80)
smsjp.cais.logica.cidade.ListaCidades.doGet(ListaCidades.java:84)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
smsjp.cais.logica.usuario.AcessoSistema.doFilter(AcessoSistema.java:31)
com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119)
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55)
root cause
javax.servlet.ServletException: javax.servlet.jsp.JspException: Exception: [.LookupUtil] Error looking up property "uf.sigla" in object type "smsjp.cais.modelo.Cidade". Cause: Unknown property 'uf'
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
org.apache.jsp.adminCidades_jsp._jspService(adminCidades_jsp.java:142)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
smsjp.cais.logica.cidade.ListaCidades.doPost(ListaCidades.java:80)
smsjp.cais.logica.cidade.ListaCidades.doGet(ListaCidades.java:84)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
smsjp.cais.logica.usuario.AcessoSistema.doFilter(AcessoSistema.java:31)
com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119)
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55)
root cause
Exception: [.LookupUtil] Error looking up property "uf.sigla" in object type "smsjp.cais.modelo.Cidade". Cause: Unknown property 'uf'
org.displaytag.util.LookupUtil.getBeanProperty(LookupUtil.java:141)
org.displaytag.model.Column.getValue(Column.java:124)
org.displaytag.model.Column.createChoppedAndLinkedValue(Column.java:201)
org.displaytag.model.Column.initialize(Column.java:178)
org.displaytag.render.TableWriterTemplate.writeTableBody(TableWriterTemplate.java:313)
org.displaytag.render.TableWriterTemplate.writeTable(TableWriterTemplate.java:138)
org.displaytag.render.HtmlTableWriter.writeTable(HtmlTableWriter.java:643)
org.displaytag.tags.TableTag.writeHTMLData(TableTag.java:1557)
org.displaytag.tags.TableTag.doEndTag(TableTag.java:1206)
org.apache.jsp.adminCidades_jsp._jspService(adminCidades_jsp.java:132)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
smsjp.cais.logica.cidade.ListaCidades.doPost(ListaCidades.java:80)
smsjp.cais.logica.cidade.ListaCidades.doGet(ListaCidades.java:84)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
smsjp.cais.logica.usuario.AcessoSistema.doFilter(AcessoSistema.java:31)
com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119)
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55)
root cause
java.lang.NoSuchMethodException: Unknown property 'uf'
org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1122)
org.apache.commons.beanutils.PropertyUtils.getSimpleProperty(PropertyUtils.java:408)
org.displaytag.util.LookupUtil.getProperty(LookupUtil.java:237)
org.displaytag.util.LookupUtil.getBeanProperty(LookupUtil.java:129)
org.displaytag.model.Column.getValue(Column.java:124)
org.displaytag.model.Column.createChoppedAndLinkedValue(Column.java:201)
org.displaytag.model.Column.initialize(Column.java:178)
org.displaytag.render.TableWriterTemplate.writeTableBody(TableWriterTemplate.java:313)
org.displaytag.render.TableWriterTemplate.writeTable(TableWriterTemplate.java:138)
org.displaytag.render.HtmlTableWriter.writeTable(HtmlTableWriter.java:643)
org.displaytag.tags.TableTag.writeHTMLData(TableTag.java:1557)
org.displaytag.tags.TableTag.doEndTag(TableTag.java:1206)
org.apache.jsp.adminCidades_jsp._jspService(adminCidades_jsp.java:132)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
smsjp.cais.logica.cidade.ListaCidades.doPost(ListaCidades.java:80)
smsjp.cais.logica.cidade.ListaCidades.doGet(ListaCidades.java:84)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
smsjp.cais.logica.usuario.AcessoSistema.doFilter(AcessoSistema.java:31)
com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119)
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs.