[RESOLVIDO] Autocomplete primefaces erro ao renderizar pagina

6 respostas
L

Ola. Estou com um problema e deve ser um erro besta, quando insiro os dados no meu formulario tem um autocomplete das cidades, ele traz certinho e salva certo no banco, porem quando salvo e é “montada” a página novamente da esse erro.

00:12:42,524 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (http--127.0.0.1-8080-1) Error Rendering View[/matricula.xhtml]: javax.el.PropertyNotFoundException: /matricula.xhtml @100,26 itemLabel="#{cid.descricao}": The class 'java.lang.Integer' does not have the property 'descricao'.
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at org.primefaces.component.autocomplete.AutoComplete.getItemLabel(AutoComplete.java:133) [primefaces-3.0.jar:]
	at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeInput(AutoCompleteRenderer.java:137) [primefaces-3.0.jar:]
	at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeMarkup(AutoCompleteRenderer.java:107) [primefaces-3.0.jar:]
	at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeEnd(AutoCompleteRenderer.java:74) [primefaces-3.0.jar:]
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:58) [primefaces-3.0.jar:]
	at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:46) [primefaces-3.0.jar:]
	at org.primefaces.component.fieldset.FieldsetRenderer.encodeContent(FieldsetRenderer.java:86) [primefaces-3.0.jar:]
	at org.primefaces.component.fieldset.FieldsetRenderer.encodeMarkup(FieldsetRenderer.java:68) [primefaces-3.0.jar:]
	at org.primefaces.component.fieldset.FieldsetRenderer.encodeEnd(FieldsetRenderer.java:45) [primefaces-3.0.jar:]
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129) [jsf-impl-2.1.3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT]
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0.Beta1]

matricula.xhtml (somente o autocomplete)

<h:outputLabel value="Cidade:" for="txtACCidade" />
							<p:autoComplete id="txtACCidade" minQueryLength="3"
								value="#{cadastroAlunoBean.pessoaVO.cidadeVO.cidade}"
								completeMethod="#{cidadeBean.completeCidade}" var="cid"
								itemLabel="#{cid.descricao}" itemValue="#{cid.cidade}" 
								queryDelay="1" />

CidadeBean

package br.com.softclean.cidade;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name="cidadeBean")
@SessionScoped
public class CidadeBean {
	
	private CidadeVO cidadeVO;
	private CidadeService cidadeServ;

	public CidadeVO getCidadeVO() {
		return cidadeVO;
	}

	public void setCidadeVO(CidadeVO cidadeVO) {
		this.cidadeVO = cidadeVO;
	}
	
	
	public List<CidadeVO> completeCidade(String prefix){
		List<CidadeVO> lsCidade = new ArrayList<CidadeVO>();
		cidadeServ = new CidadeService();
		
		lsCidade = cidadeServ.getByPrefix(prefix);		
		
		return lsCidade;
		
	}
	

}

CidadeVO

@Entity
@Table(name="CIDADE")
public class CidadeVO {
	@Id
	private Integer cidade;
	@Column
	private String descricao;
	@Column
	private String uf;
	@Column
	private String ddd;

//get set

Obs: a cidade salva certo no banco porém, da esse erro logo após

6 Respostas

L

opa, blz?

value="#{cadastroAlunoBean.pessoaVO.cidadeVO.cidade}"

@Entity @Table(name="CIDADE") public class CidadeVO { @Id private Integer cidade;

o cidadeVO.cidade que você está utilizando para popular o autocomplete(propriedade value) é Integer e não tem o atributo descricao que você está chamando aqui:

itemLabel="#{cid.descricao}"

tente desta forma no seu matricula.xhtml, remova o .cidade depois do cidadeVO:

<p:autoComplete id="txtACCidade" minQueryLength="3" value="#{cadastroAlunoBean.pessoaVO.cidadeVO}" completeMethod="#{cidadeBean.completeCidade}" var="cid" itemLabel="#{cid.descricao}" itemValue="#{cid.cidade}" queryDelay="1" />

abraço!

L

Obrigado LeoCBS, um dos problemas erra esse mesmo, o outro era a falta do converter no autocomplete.

matricula.xhtml

<p:autoComplete id="txtACCidade" minQueryLength="3"
								value="#{cadastroAlunoBean.pessoaVO.cidadeVO}"
								completeMethod="#{cidadeBean.completeCidade}" var="cid"
								itemLabel="#{cid.descricao}" itemValue="#{cid}" converter="cidadeConverter" 
								queryDelay="1" />

cidadeConverter

@FacesConverter(value="cidadeConverter")
public class JogadorConverter implements Converter {

 @Override
 public Object getAsObject(FacesContext fc, UIComponent uic, String string) { 
     CidadeDAO cidadeDAO = new CidadeDAO()
     return  cidadeDAO.buscaCidadePorNome(string);
 }

 @Override
 public String getAsString(FacesContext fc, UIComponent uic, Object o) {
       CidadeVO cidadeVO = new CidadeVO();
       cidadeVO = (CidadeVO) o;
       return Cidade.getDescricao;
    }

}

Obrigado pela atenção

L

que bom que resolveu ladajr

coloca [RESOLVIDO] no título pra ajudar quem for pesquisar sobre o assunto…

abraço

T

nesta solução, e se houver dois cadastros com o mesmo valor, o que pode acontecer, o cidadeDAO.buscaCidadePorNome(string); não vai se perder???

L

Opa, blz?

tens um exemplo de código para exemplificar?

abraço

T

Oi, desculpe a demora em responder, segue abaixo:

No converter:

public Object getAsObject(FacesContext fc, UIComponent uic, String string) {

// throw new UnsupportedOperationException(“Not supported yet.”);

if (string != null) {

EntityManager manager = getEntityManager();

GruposClientesDAO dao = new GruposClientesDAO(manager);
try {
            return (GruposClientes) dao.buscarPorNome(string);
        } catch (NoResultException nre) {
            return null;
        }

    } else {
        return null;
    }
}
No DAO:

public GruposClientes buscarPorNome(String pNome) {

Query query = this.manager.createNamedQuery(“GruposClientes.buscarPorNome”);

query.setParameter(“p_nome”, pNome.trim());

return (GruposClientes) query.getSingleResult();

}

No VO:
@NamedQuery(name=“GruposClientes.buscarPorNome”, query=“SELECT q FROM GruposClientes q WHERE q.nome = :p_nome”)

Nesta situação, se houver um mais de um grupo com o mesmo nome vai dar problema… estou usando assim mas, preciso de uma solução.

Criado 26 de abril de 2012
Ultima resposta 20 de mai. de 2012
Respostas 6
Participantes 3