JSF 2 X 0 Eu

Bom dia pessoal,

Eu tô caindo numa “NullPointerException” desde ontem pela manha e a solução usada em outros casos
na mesma controller não está dando certo.

O cenário é o seguinte:
Estou numa pagina “lista”, seleciono um item e vou editá-lo, lá alguns combos serão carregados, blz,
o combo cboUF é carregado, se clico em voltar sem selecionar item algum, retorna para a pagina “lista”,
mas se seleciono um item, pronto, qq botão que clico me retorna isso:

[quote]java.lang.NullPointerException
at br.com.orionti.sige.dao.GenericDAO.getListAll(GenericDAO.java:148)
at br.com.orionti.sige.dao.UFDAO.getList(UFDAO.java:27)
at br.com.orionti.sige.converter.UFConverter.getAsObject(UFConverter.java:32)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:171)
at com.sun.faces.renderkit.html_basic.MenuRenderer.conv

[/quote]

controller:

[code]public List listUF() {

	if (ufs == null) {			
		ufs = ufDAO.getList();
		
		return ufs;	
	}
	return ufs;
}[/code]

view:

<p:selectOneMenu id="cboUF" style="width: 150px;" value="#{escolaController.uf}" converter="ufConverter">
		<f:selectItem itemLabel="Selecione..." itemValue="" />
		<f:selectItems value="#{escolaController.listUF()}" var="u" itemValue="#{u}" itemLabel="#{escolaController.uf.descricao}" />
</p:selectOneMenu>[/code]

Converter:
[code]@FacesConverter(value = "ufConverter")
public class UFConverter implements Converter {
	
	private List<UF> lista;
	private UFDAO ufdao;
	
	public UFConverter() {
		
		lista = new ArrayList<UF>();
		ufdao = new UFDAO();
	}

	@Override
	public Object getAsObject(FacesContext context, UIComponent component, String value) {
		if (value != null && !value.equals("")) {
						
			
			lista = ufdao.getList();
			
			for (UF uf : lista) {
				
				if (uf.getUf().equals(value)) {
					
					return uf;
				}
			}
		}
		
		return null;
	}

	@Override
	public String getAsString(FacesContext context, UIComponent component, Object value) {
		if (value instanceof UF) {
			return ((UF)value).getUf();
		}
		return "";
	}

Pelo visto muitos passaram por isso, no mesmo form tenho outro combo, a diferença é que esse outro
é populado com dados oriundos de uma classe sem acesso ao banco.

Problema de escopo novamente?

Alguém?

Falews.

Intancia sua variável UFDAO e vê se dá certo!

private UFDAO ufdao = new UFDAO(); 

Bom dia rafadelnero,

Deu certo não, até piorou rs, nem carregou o combo e ainda veio isso de quebra quando tento executar:

É que sua lista provavelmente esta indo nula para a view, tenta isso:

    public List<UF> listUF() {  
           ufs = ufDAO.getList();  
            if (ufs == null) {            
                ufs = new ArrayList<>();
            }  
            return ufs;  
        }  

o problema não esta nesse trecho


&lt;p:selectOneMenu id="cboUF" style="width: 150px;" value="#{escolaController.uf}" converter="ufConverter"&gt;  
        &lt;f:selectItem itemLabel="Selecione..." itemValue="" /&gt;  
        &lt;f:selectItems value="#{escolaController.listUF()}" var="u" itemValue="#{u}" itemLabel="#{escolaController.uf.descricao}" /&gt;  
&lt;/p:selectOneMenu&gt;  

o correto naum seria isso


&lt;p:selectOneMenu id="cboUF" style="width: 150px;" value="#{escolaController.uf}" converter="ufConverter"&gt;  
        &lt;f:selectItem itemLabel="Selecione..." itemValue="" /&gt;  
        &lt;f:selectItems value="#{escolaController.ufs}" var="u" itemValue="#{u}" itemLabel="#{u.descricao}" /&gt;  
&lt;/p:selectOneMenu&gt;  

acho que assim funciona tenta ai e boa sorte…

Polverini, Cristian,

Nâo, ainda não deu certo.

Cacetada!!!

Bom voce poderia postar a classe UFDAO e tambem poderia debugala pois como podemos ver o erro primeiro aconteceu no seu converter e depois na classe UFDAO

faz um teste aqui o

 public Object getAsObject(FacesContext context, UIComponent component, String value) {  
        if (value != null && !value.equals("")) {  
                          
              if(ufdao == null) {
                    System.out.println("ufdao nulo");
                    return null;
              }

            lista = ufdao.getList();  
              
            for (UF uf : lista) {  
                  
                if (uf.getUf().equals(value)) {  
                      
                    return uf;  
                }  
            }  
        }  
          
        return null;  
    }  

veja se ajuda …

Cristian,

Eu acho q o erro n está na DAO pq ela funciona pra outras classes e até pra essa mesmo, ela
carrega os dados inicialmente, dpois que dá zona…

Método da GenericDAO

// GetAll com paginação
	@SuppressWarnings({ "unchecked", "hiding", "rawtypes" })
	protected <T> List<T> getListAll(Integer firstRsult, Integer maxResult, String ordem) {

		CriteriaBuilder builder = getEntityManager().getCriteriaBuilder();
		CriteriaQuery cq = builder.createQuery(entityClass);
		Root from = cq.from(entityClass);

		cq.select(cq.from(entityClass)).orderBy(builder.asc(from.get(ordem)));

		try {
			Query q = getEntityManager().createQuery(cq);
			if (firstRsult != null) {
				q.setFirstResult(firstRsult);
				q.setMaxResults(maxResult);
			}

			return q.getResultList();
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}

		return null;
	}

Método da UFDAO

	@Override
	public List<UF> getList() {
		
		return getListAll(null, null, "uf");
	}

Mas e ai fez o teste que de pedi, qual foi o resultado ?

Acabei de fazer, nem chega no converter.

Chega, mas o dao n é nulo.

O erro tá acontecendo após um item da lista ter sido selecionado.

Cara, vou olhar o que o erro diz:

at br.com.orionti.sige.dao.GenericDAO.getListAll(GenericDAO.java:148) Essa linha deu o erro. O que tem aí?

Bom dia Hebert,

CriteriaBuilder builder = getEntityManager().getCriteriaBuilder();

É o q tá na linha 148.

[quote=UpTheIrons]Bom dia Hebert,

CriteriaBuilder builder = getEntityManager().getCriteriaBuilder();

É o q tá na linha 148.[/quote]getEntityManager() tá instanciado?

No UFDAO

[code]
@PersistenceContext
private EntityManager em;

public UFDAO() {
	super(UF.class);		
}[/code]

[code]public abstract class GenericDAO {

protected abstract EntityManager getEntityManager();

private Class<T> entityClass;

public GenericDAO(Class<T> entityClass) {
	this.entityClass = entityClass;
}

…[/code]

Ela funciona normalmente, a princípio, carrega o “combo”, mas quando um item é selecionado
que tá dando esta zica!

[quote=UpTheIrons]No UFDAO

[code]
@PersistenceContext
private EntityManager em;

public UFDAO() {
	super(UF.class);		
}[/code]

[code]public abstract class GenericDAO {

protected abstract EntityManager getEntityManager();

private Class<T> entityClass;

public GenericDAO(Class<T> entityClass) {
	this.entityClass = entityClass;
}

…[/code]

Ela funciona normalmente, a princípio, carrega o “combo”, mas quando um item é selecionado
que tá dando esta zica![/quote]O método que carrega o combo, está pegando esse cara null. Você debugou para ver se esse cara está ou não null?

Acabei de ver aqui, ele tá ficando null…

[quote=UpTheIrons]Acabei de ver aqui, ele tá ficando null…[/quote]Quando for ver um erro cara, não fique em tentativa… trocar um código sem saber o real motivo de problema vai te levar a outras coisas…

Veja se o método que troca combo está chamando essa classe como deveria. Se você chama a classe pelo browser, vai rolar injection pra tu. Mas se você faz isso por algum método interno, não vai rolar injection…

Mas eu só testei o que eu já tinha usado e como o cenário é o mesmo e eu já tinha testado, pra mim tava tudo ok,
só que n vai de forma alguma.

E a classe nem haveria pq ser chamada novamente, ela já carregou o combo, n precisaria mais dela, por isso uso
até uma dica q vc mesmo deu em outro post meu, algo como:

public List<UF> listUF() {
		if (ufs == null) {
			ufs = ufDAO.getList();			
			return ufs;
		}
		return ufs;
        
	}

O problema tá após selecionar um item do combo, que já estava prontinho e ao clicar em qq botão, ele faz um
“request” zerando o “ufs” e tenta carregá-lo novamente.

Vou futucar esta p… aqui, já tem bem umas 15h de atraso, mas td bem, vamo q vamo!

[quote=UpTheIrons]Mas eu só testei o que eu já tinha usado e como o cenário é o mesmo e eu já tinha testado, pra mim tava tudo ok,
só que n vai de forma alguma.

E a classe nem haveria pq ser chamada novamente, ela já carregou o combo, n precisaria mais dela, por isso uso
até uma dica q vc mesmo deu em outro post meu, algo como:

[code]
public List listUF() {
if (ufs == null) {
ufs = ufDAO.getList();
return ufs;
}
return ufs;

}

[/code]O problema tá após selecionar um item do combo, que já estava prontinho e ao clicar em qq botão, ele faz um
“request” zerando o “ufs” e tenta carregá-lo novamente.

Vou futucar esta p… aqui, já tem bem umas 15h de atraso, mas td bem, vamo q vamo![/quote]Não é só pq funcionou uma vez que vá funcionar sempre. =P

Esse novo request pode estar fazendo algo totalmente diferente. Veja qual método está chamado esse lugar que deu nullpointer. ele é o motivo.

Você consegue. [=