Displaytag não encontra property [RESOLVIDO]

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.

ninguem?
:cry:

Me parece que o problema é em função de “case sensitive” no getter da UF na Classe cidade

Tente mudar o getter de getUF para getUf. Ou mude no displaytag para uF!

eheehe Valeu Laggaffe não tinha nem notado isso.
Deu certo.
Problema Resolvido.
Valeu mesmo