JSF - Pessoal sou novo tem como dar uma ajudinha.[RESOLVIDO]

2 respostas
L
Estou usando Hibernate + JSF estou com problemas em um método de busca:
@SuppressWarnings("unchecked")
	public List<Cidade> buscaPorCidadeEstado(String nomeCidade,
			Long codigoEstadoCidade) {
		ArrayList<Cidade> listaRetorno = new ArrayList<Cidade>();
		try {

			Session sessao = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = sessao.createCriteria(Cidade.class);
			if (!nomeCidade.isEmpty()) {
				criteria
						.add(Restrictions.ilike("nome", "%" + nomeCidade + "%"));
			}

			if ((codigoEstadoCidade != null) || (codigoEstadoCidade != 0)) {
				criteria.createAlias("estado", "estado");
				criteria.add(Restrictions.eq("estado", codigoEstadoCidade));
			}
			criteria.addOrder(Order.asc("nome"));
			listaRetorno = (ArrayList<Cidade>) criteria.list();
		} catch (Exception e) {

		}

		return listaRetorno;
	}

O método que passo é:
       public String pesquisar() {
		try {
			CidadeDAO cidadeDAO = new CidadeDAO();
			this.listaPesquisaCidade = cidadeDAO.buscaPorCidadeEstado(this.pesquisaCidadeNome, this.cidadeCodigoEstado);
			
		} catch (Exception e) {
			JSFUtil.addInfoMessage(Mensagens.erroPesquisarCidadeEstado);
		}
		return null;
	}
Na tela estou mostrando assim:
                   <rich:dataTable id="listaCidadePesquisar"
						value="#{cidadeBacking.listaPesquisaCidade}" var="cidade" width="100%">
						<f:facet name="caption">
							<h:outputText value="Lista de Cidades" />
						</f:facet>
						<f:facet name="header">
							<rich:columnGroup>
								<rich:column>
									<h:outputText value="Código" />
								</rich:column>
								<rich:column>
									<h:outputText value="Cidade" />
								</rich:column>
								<rich:column>
									<h:outputText value="Estado" />
								</rich:column>
								<rich:column>
									<h:outputText value="Pais" />
								</rich:column>
								<rich:column colspan="2">
									<h:outputText value="Acoes" />
								</rich:column>
							</rich:columnGroup>
						</f:facet>
						<rich:column>
							<h:outputText value="#{cidade.codigo}" />
						</rich:column>
						<rich:column>
							<h:outputText value="#{cidade.nome}" />
						</rich:column>
						<rich:column>
							<h:outputText value="#{cidade.estado.nome}" />
						</rich:column>
						<rich:column>
							<h:outputText value="#{cidade.estado.pais.nome}" />
						</rich:column>
						<rich:column>
							<h:commandLink value="Alterar"
								action="#{cidadeBacking.preparaAlteracao}">
								<f:setPropertyActionListener value="#{cidade}"
									target="#{cidadeBacking.cidadeSelecionada}" />
							</h:commandLink>
						</rich:column>
		
						<rich:column>
							<a4j:commandLink value="Excluir" action="#"
								onclick="Richfaces.showModalPanel('modalExcluirCidade')">
								<f:setPropertyActionListener value="#{cidade}"
									target="#{cidadeBacking.cidadeSelecionada}" />
							</a4j:commandLink>
						</rich:column>
					</rich:dataTable>

Acredito que não seja problema na tela pois se passo uma lista de um outro método exibe normalmente, e se passo this.listaPesquisaCidade = cidadeDAO.buscaPorCidadeEstado(this.pesquisaCidadeNome, null);
Também funciona.
Se alguem puder ajudar agradeço.

2 Respostas

matheuslmota
Acho que teu codigo fica mais facil de visualizar assim:
@SuppressWarnings("unchecked")
public List<Cidade> buscaPorCidadeEstado(String nomeCidade,
Long codigoEstadoCidade) {
ArrayList<Cidade> listaRetorno = new ArrayList<Cidade>();
try {

Session sessao = HibernateUtil.getSessionFactory().openSession();
Criteria criteria = sessao.createCriteria(Cidade.class);
if (!nomeCidade.isEmpty()) {
criteria
.add(Restrictions.ilike("nome", "%" + nomeCidade + "%"));
}

if ((codigoEstadoCidade != null) || (codigoEstadoCidade != 0)) {
criteria.createAlias("estado", "estado");
criteria.add(Restrictions.eq("estado", codigoEstadoCidade));
}
criteria.addOrder(Order.asc("nome"));
listaRetorno = (ArrayList<Cidade> criteria.list();
} catch (Exception e) {

}

return listaRetorno;
}

O método que passo é:
public String pesquisar() {
try {
CidadeDAO cidadeDAO = new CidadeDAO();
this.listaPesquisaCidade = cidadeDAO.buscaPorCidadeEstado(this.pesquisaCidadeNome, this.cidadeCodigoEstado);

} catch (Exception e) {
JSFUtil.addInfoMessage(Mensagens.erroPesquisarCidadeEstado);
}
return null;
}
Na tela estou mostrando assim:
<rich:dataTable id="listaCidadePesquisar"
value="#{cidadeBacking.listaPesquisaCidade}" var="cidade" width="100%">
<f:facet name="caption">
<h:outputText value="Lista de Cidades" />
</f:facet>
<f:facet name="header">
<rich:columnGroup>
<rich:column>
<h:outputText value="Código" />
</rich:column>
<rich:column>
<h:outputText value="Cidade" />
</rich:column>
<rich:column>
<h:outputText value="Estado" />
</rich:column>
<rich:column>
<h:outputText value="Pais" />
</rich:column>
<rich:column colspan="2">
<h:outputText value="Acoes" />
</rich:column>
</rich:columnGroup>
</f:facet>
<rich:column>
<h:outputText value="#{cidade.codigo}" />
</rich:column>
<rich:column>
<h:outputText value="#{cidade.nome}" />
</rich:column>
<rich:column>
<h:outputText value="#{cidade.estado.nome}" />
</rich:column>
<rich:column>
<h:outputText value="#{cidade.estado.pais.nome}" />
</rich:column>
<rich:column>
<h:commandLink value="Alterar"
action="#{cidadeBacking.preparaAlteracao}">
<f:setPropertyActionListener value="#{cidade}"
target="#{cidadeBacking.cidadeSelecionada}" />
</h:commandLink>
</rich:column>

<rich:column>
<a4j:commandLink value="Excluir" action="#"
onclick="Richfaces.showModalPanel('modalExcluirCidade')">
<f:setPropertyActionListener value="#{cidade}"
target="#{cidadeBacking.cidadeSelecionada}" />
</a4j:commandLink>
</rich:column>
</rich:dataTable>

Sempre pões teu código entre as tags code

L

Achei meu erro no alias estava (“estado”, “estado”), porem eu estava comparando errado ou seja, eu tava comparando um codigoEstadoCidade com estado mas tem que ser estado.codigo
A todos muito obrigado

Criado 5 de agosto de 2010
Ultima resposta 6 de ago. de 2010
Respostas 2
Participantes 2