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”.
Desde já agradeço a ajuda.