[RESOLVIDO]Primeface selectOneMenu retornando Null

Bom dia.

Estou com um problema com o primefaces. É o seguinte:

  • Essa é a tela de um cadastro a pessoa seleciona o turno(matutino, vespertino etc) e a partir dele eu listo as escolas que possuem vagas para esse turno, até ai tudo bem.
    Mas por algum motivo eu n consigo pegar os dados que o usuário escolhe, só retorna null. Usei esse mesmo modelo em outro formulário, porém ele funcionou corretamente.
    Esse dialog é chamado 3x pois o usuário pode escolher trÊs opções de escolas, mas n consigo pegar nenhuma opção do usuário :(.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui">
<h:body>

	<p:dialog header="Gerenciar Escolas" widgetVar="dialogGerEscolaCurso"
		resizable="true" modal="true" showEffect="slide">
			<h:panelGrid columns="6" cellpadding="5">
			
				<p:selectOneMenu id="infosEscolaCurso" value="#{vagasControle.vagas.turno}">
					<f:selectItem itemLabel="Selecione a Turno" itemValue="" />
					<f:selectItems value="#{vagasControle.vagass}"/>
					<p:ajax update="escolaVaga" listener="#{vagasControle.listaEscola}" /> 
				</p:selectOneMenu>

				<p:selectOneMenu id="escolaVaga" value="#{escolaControle.escola.nome}">
					<f:selectItem itemLabel="Selecione a Escola" />
					<f:selectItems value="#{vagasControle.escolas}" var="c" itemValue="#{c.nome}" />
				</p:selectOneMenu>
				
				<p:commandButton oncomplete="dialogGerEscolaCurso.hide();"
					actionListener="#{vagasControle.teste}"
					value="Alterar" />
				
				</h:panelGrid>

	</p:dialog>
	
</h:body>
</html>[/code]

Erro[code]

TURNO: 
ESCOLA: null
21/08/2012 11:13:59 javax.faces.event.MethodExpressionActionListener processAction
SEVERE: 'java.lang.NullPointerException' recebido ao invocar escuta de ação '#{vagasControle.teste}' para o componente 'j_idt118'
21/08/2012 11:13:59 javax.faces.event.MethodExpressionActionListener processAction
SEVERE: java.lang.NullPointerException
	at br.com.matricula.controle.VagasControle.teste(VagasControle.java:137)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98)
	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:148)
	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:772)
	at javax.faces.component.UICommand.broadcast(UICommand.java:300)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

21/08/2012 11:13:59 com.sun.faces.context.AjaxExceptionHandlerImpl log
SEVERE: JSF1073: javax.faces.event.AbortProcessingException obtido durante o processamento de INVOKE_APPLICATION 5: UIComponent-ClientId=j_idt118, Message=/pages/adm/dialogs/manterEscolaOpcaoEditarDialog.xhtml @23,24 actionListener="#{vagasControle.teste}": java.lang.NullPointerException
21/08/2012 11:13:59 com.sun.faces.context.AjaxExceptionHandlerImpl log
SEVERE: /pages/adm/dialogs/manterEscolaOpcaoEditarDialog.xhtml @23,24 actionListener="#{vagasControle.teste}": java.lang.NullPointerException
javax.faces.event.AbortProcessingException: /pages/adm/dialogs/manterEscolaOpcaoEditarDialog.xhtml @23,24 actionListener="#{vagasControle.teste}": java.lang.NullPointerException
	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:182)
	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:772)
	at javax.faces.component.UICommand.broadcast(UICommand.java:300)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
	at br.com.matricula.controle.VagasControle.teste(VagasControle.java:137)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98)
	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:148)
	... 25 more

VagasControle.java


package br.com.matricula.controle;

import java.io.Serializable;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import br.com.matricula.dao.ComposicaoDao;
import br.com.matricula.dao.ComposicaoDaoImp;
import br.com.matricula.dao.VagasDao;
import br.com.matricula.dao.VagasDaoImp;
import br.com.matricula.modelo.Composicao;
import br.com.matricula.modelo.Escola;
import br.com.matricula.modelo.Vagas;

@ManagedBean(name="vagasControle")
@SessionScoped
public class VagasControle implements Serializable{
	
	@ManagedProperty(value = "#{escolaControle}")
	private EscolaControle escolaControle;
	@ManagedProperty(value = "#{composicaoControle}")
	private ComposicaoControle composicaoControle;
	private DataModel<Vagas> listarVagas;
	private DataModel<Composicao> listarComposicao;
	private DataModel<Composicao> listarComposicaoId;
	private static final long serialVersionUID = 1L;
	private Vagas vagas;
	private Escola esc;
	private Map<String, Object> vagasItemTurno=null; 
	private Map<String, Object> vagasItemEscola=null; 
	
	@javax.annotation.PostConstruct  
	public void inicializarObjetos(){  
	    this.vagas = new Vagas();
		this.esc = new Escola();
	}

	public ComposicaoControle getComposicaoControle() {
		return composicaoControle;
	}

	public void setComposicaoControle(ComposicaoControle composicaoControle) {
		this.composicaoControle = composicaoControle;
	}

	public EscolaControle getEscolaControle() {
		return escolaControle;
	}

	public void setEscolaControle(EscolaControle escolaControle) {
		this.escolaControle = escolaControle;
	}

	public Vagas getVagas() {
		return vagas;
	}

	public void setVagas(Vagas vagas) {
		this.vagas = vagas;
	}

	public DataModel<Vagas> getListarVagas() {
		List<Vagas> lista = new VagasDaoImp().list(escolaControle.getEscola().getId());
		listarVagas = new ListDataModel<Vagas>(lista);
		return listarVagas;
	}

	public DataModel<Composicao> getListarVagasComposicaoSerie() {
		List<Composicao> lista = new ComposicaoDaoImp().list();
		listarComposicao = new ListDataModel<Composicao>(lista);
		return listarComposicao;
	}

	public void adicionarVagas(ActionEvent actionEvent){
		VagasDao vagasDao = new VagasDaoImp();
		ComposicaoDao composicaoDao = new ComposicaoDaoImp();
		List<Composicao> lista = composicaoDao.list(composicaoControle.getComposicao().getComposicao(),composicaoControle.getComposicao().getSerie());
		listarComposicaoId = new ListDataModel<Composicao>(lista);
		Escola e = new Escola();
		Composicao c = new Composicao();
		try {
			e.setId(escolaControle.getEscola().getId());//passando valor certo do id da escola
			e.setBairro(escolaControle.getEscola().getBairro());
			e.setInep(escolaControle.getEscola().getInep());
			e.setNome(escolaControle.getEscola().getNome());
			c.setId(listarComposicaoId.getRowData().getId());//passando valor certo da composicao
			c.setSerie(listarComposicaoId.getRowData().getSerie());
			c.setComposicao(listarComposicaoId.getRowData().getComposicao());
			vagas.setEscola(e);
			vagas.setComposicao(c);
			vagasDao.save(vagas);
		} catch (Exception e2) {
			e2.getStackTrace();
		}
	}
    //lista turnos
    public Map<String, Object> getVagass(){  
    	VagasDao dao = new VagasDaoImp();
    	vagasItemTurno = new LinkedHashMap<String, Object>();  
        for(Iterator iter =dao.list().iterator();iter.hasNext();){  
        Vagas c = (Vagas) iter.next();  
        vagasItemTurno.put(c.getTurno(), c.getTurno());  
        }  
        System.out.print(vagasItemTurno);
    return vagasItemTurno;  
}
	//lista escolas
    public Map<String, Object> getEscolas(){ 
    	VagasDao dao = new VagasDaoImp();
    	vagasItemEscola = new LinkedHashMap<String, Object>();  
        for(Iterator iter =dao.list(vagas.getTurno()).iterator();iter.hasNext();){  
        Vagas c = (Vagas) iter.next();  
        vagasItemEscola.put(c.getEscola().getNome(), c.getEscola().getNome());  
        }  
        System.out.print(vagasItemEscola);

    return vagasItemEscola;  
}
    
    public void listaEscola(AjaxBehaviorEvent event) {
    	VagasDao dao = new VagasDaoImp();
    		}
    
    public void teste(ActionEvent actionEvent){
    	System.out.println("\nTURNO: " + vagas.getTurno());
    	System.out.println("ESCOLA: " +esc.getNome());
    	System.out.println("\nEscolassss:"+ vagas.getEscola().getNome());
    }

}

EscolaControle.java

package br.com.matricula.controle;

import java.io.Serializable;
import java.util.List;
import java.util.logging.Logger;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.primefaces.event.FlowEvent;

import br.com.matricula.dao.EscolaDao;
import br.com.matricula.dao.EscolaDaoImp;
import br.com.matricula.modelo.Escola;

@ManagedBean(name="escolaControle")
@SessionScoped
public class EscolaControle implements Serializable {

	private static final long serialVersionUID = 1L;
	private Escola escola;// = new Aluno();
	private static Logger logger = Logger.getLogger(AlunoControle.class
			.getName());
	private boolean skip;
	private DataModel<Escola> listarEscolas;

	@javax.annotation.PostConstruct
	public void inicializarObjetos() {
		this.escola = new Escola();
	}
	
	public Escola getEscola() {
		return escola;
	}

	public void setEscola(Escola escola) {
		this.escola = escola;
	}

	public void cadastrarEscola() {
		EscolaDao escolaDao = new EscolaDaoImp();
	//	System.out.print("Escola"+ escola.getBairro()+ escola.getNome());
		escolaDao.save(escola);
		
	}

	public void destroyWorld(ActionEvent actionEvent) {
		FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
				"System Error", "Please try again later.");

		FacesContext.getCurrentInstance().addMessage(null, message);
	}

	public String onFlowProcess(FlowEvent event) {
		logger.info("Current wizard step:" + event.getOldStep());
		logger.info("Next step:" + event.getNewStep());

		if (skip) {
			skip = false; // reset in case user goes back
			return "confirm";
		} else {
			return event.getNewStep();
		}
	}

	public DataModel<Escola> getListarEscolas() {
		List<Escola> lista = new EscolaDaoImp().list();
		listarEscolas = new ListDataModel<Escola>(lista);
		return listarEscolas;
	}

	public void prepararAlterarEscola(ActionEvent actionEvent) {
		
		
			escola = (Escola) (listarEscolas.getRowData());
			
		//	System.out.print(">>>>>>>>>>>>>"+escola.getId());
			//vagasControle.getListarVagas(escola.getId());
			
			
		//	FacesContext.getCurrentInstance().getExternalContext()
		//			.redirect("/MatriculaOnline/pages/adm/manterEscola.jsp");

	
	}
	

	public String excluirEscola() {

		Escola escolaTemp = (Escola) (listarEscolas.getRowData());
		EscolaDao dao = new EscolaDaoImp();
		dao.remove(escolaTemp);
		return "index";

	}

	public void alterarEscola(ActionEvent actionEvent) {
		try {
			EscolaDao dao = new EscolaDaoImp();
			
			dao.update(escola);
		///	FacesContext.getCurrentInstance().getExternalContext()
		//			.redirect("/MatriculaOnline/pages/adm/listarEscola.jsp");

		} catch (Exception e) {
			e.printStackTrace();
		}

	}
	public void prepararCadastrarComposicao(ActionEvent actionEvent){
		try {
			escola = (Escola) (listarEscolas.getRowData());
		//	vagasControle = new VagasControle();
		//	vagasControle.setIdEscola(listarEscolas.getRowData().getId());
		//	System.out.print(listarEscolas.getRowData().getId());

			FacesContext.getCurrentInstance().getExternalContext().redirect("/MatriculaOnline/pages/adm/manterEscola.jsp");

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
    public void teste(ActionEvent actionEvent){
  //  	System.out.print("s" + vagas.getEscola().getNome());
    	System.out.println("\nEscola:"+ escola.getNome());
    }
}

Vagas.java


package br.com.matricula.modelo;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;

@Entity
@SequenceGenerator(name = "vagasSequence", sequenceName = "vagasSequence")public class Vagas implements Serializable {
	private static final long serialVersionUID = 1L;


	@Id
    @GeneratedValue(strategy=GenerationType.AUTO, generator="vagasSequence")
	@Column(name="id_vagas")
	private long id;
	private long vagasTotal;
	private String turno;
	private long vagasRestantes;
	
    @ManyToOne(cascade=CascadeType.ALL)
    private Composicao composicao;
    
    @ManyToOne(cascade=CascadeType.ALL)
    private Escola escola;
    
    @OneToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
	@JoinColumn(name = "id_alunolista")
	private List<AlunoLista> alunoListas;
	

    
	public List<AlunoLista> getAlunoListas() {
		return alunoListas;
	}
	public void setAlunoListas(List<AlunoLista> alunoListas) {
		this.alunoListas = alunoListas;
	}
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public long getVagasTotal() {
		return vagasTotal;
	}
	public void setVagasTotal(long vagasTotal) {
		this.vagasTotal = vagasTotal;
	}
	public String getTurno() {
		return turno;
	}
	public void setTurno(String turno) {
		this.turno = turno;
	}
	public long getVagasRestantes() {
		return vagasRestantes;
	}
	public Composicao getComposicao() {
		return composicao;
	}
	public void setComposicao(Composicao composicao) {
		this.composicao = composicao;
	}
	public Escola getEscola() {
		return escola;
	}
	public void setEscola(Escola escola) {
		this.escola = escola;
	}

}
Escola.Java


package br.com.matricula.modelo;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;

@Entity
@SequenceGenerator(name = "escolaSequence", sequenceName = "escolaSequence")
public class Escola implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
    @GeneratedValue(strategy=GenerationType.AUTO, generator="escolaSequence")
	@Column(name="id_escola")
    private int id;
	private int inep;
	private String nome;
	private String bairro;
	@OneToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
	@JoinColumn(name = "id_vagas")
	private List<Vagas> vagas;
    
	public List<Vagas> getVagas() {
		return vagas;
	}
	public void setVagas(List<Vagas> vagas) {
		this.vagas = vagas;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getInep() {
		return inep;
	}
	public void setInep(int inep) {
		this.inep = inep;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getBairro() {
		return bairro;
	}
	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

}

Aceito qualquer crítica sobre o código, pois esse é o meu primeiro “sistema”. :slight_smile:

Desde já agradeço a ajuda.

Olá Cledsonjr,

Estava olhando seu form… na linha 11:

<f:selectItems value="#{vagasControle.vagass}"/>

Não tem um ‘s’ a mais no vagas???

[quote=cido18]Olá Cledsonjr,

Estava olhando seu form… na linha 11:

<f:selectItems value="#{vagasControle.vagass}"/>

Não tem um ‘s’ a mais no vagas???[/quote]

Vlw pela resposta Cido18!

Mas não é isso. Esse método eu criei para teste e ficou com esse nome mesmo.
Irei trocar esse nome em breve.
Aqui o método em questão:

public Map<String, Object> getVagass(){ VagasDao dao = new VagasDaoImp(); vagasItemTurno = new LinkedHashMap<String, Object>(); for(Iterator iter =dao.list().iterator();iter.hasNext();){ Vagas c = (Vagas) iter.next(); vagasItemTurno.put(c.getTurno(), c.getTurno()); } System.out.print(vagasItemTurno); return vagasItemTurno; }

Muito obrigado Cido18. Graças a você percebi o meu erro ou não.

Esse form deve ficar dentro de outro form.
Ou isso é uma má prática? Porém agora está funcionando!

Da uma olhada:

http://www.webxml.com.br

http://safhira.webxml.com.br/safhira/

foram criados com PrimeFaces

Olha eu não sei se é má pratica, mas eu já tive que fazer isso em jsf 1.2 XD