Gente, estou aprendendo JSF (estou usando jsf + richfaces) e to com um problema num command button que eu coloquei em um formulario
quando eu clico no botao para executar a acao ele simplesmente nem entra no metodo que deveria … o bean jah esta mapeado corretamente porque, no forumalario existem 3 combos que estao sendo preenchidos com metodos do bean
vou colocar os codigos aqui, quem sabe alguem possa me ajudar:
/**
*
* @author bernardo
*/
public class NovoPlanejamentoMB extends GenericMB {
private Logger logger = Logger.getLogger(NovoPlanejamentoMB.class);
private PlanejamentoService planejamentoService;
private Planejamento planejamento;
private SetorDiariaService setorDiariaService;
private SetorDiaria setorDiaria;
//Variáveis do formulário
private Long mesPlanejamento;
private Long anoPlanejamento;
private Long setorPlanejamento;
public String carregarPagina() {
try {
popularComboMes();
popularComboAno();
popularComboSetor();
} catch (DAOException ex) {
logger.error(ex);
ex.printStackTrace();
}
return "CRIA_PLANEJAMENTO";
}
// Método para cadastrar planejamento
public String cadastrarPlanejamento() {
logger.info("TESTE");
try {
planejamentoService = new PlanejamentoService();
planejamento = new Planejamento();
setorDiariaService = new SetorDiariaService();
setorDiaria = setorDiariaService.retornarSetorDiaria(SetorDiaria.class, setorPlanejamento);
planejamento.setNumMesPlanejamentoPla(mesPlanejamento);
planejamento.setNumAnoPlanejamentoPla(anoPlanejamento);
planejamento.setDscPeriodoPlanejamentoPla(mesPlanejamento + "/" + anoPlanejamento);
planejamento.setDatCriacaoPlanejamentoPla(Calendar.getInstance().getTime());
planejamento.setFkSeqSetorDiariaSdi(setorDiaria);
planejamentoService.criarPlanejamento(planejamento);
JSFHelper.addGlobalMessage("Planejamento cadastrado com sucesso");
return "SUCESSO";
} catch (Exception ex) {
logger.error(ex);
ex.printStackTrace();
JSFHelper.addGlobalMessage(ex.getMessage());
return "ERRO";
}
}
// Método para atualizar planejamento
public String atualizarPlanejamento() {
planejamentoService = new PlanejamentoService();
planejamento = new Planejamento();
try {
planejamentoService.atualizarPlanejamento(planejamento);
JSFHelper.addGlobalMessage("Planejamento atualizado com sucesso");
return "SUCESSO";
} catch (Exception ex) {
logger.error(ex);
ex.printStackTrace();
JSFHelper.addGlobalMessage(ex.getMessage());
return "ERRO";
}
}
// Método para excluir planejamento
public String excluirImovel() {
planejamentoService = new PlanejamentoService();
planejamento = new Planejamento();
try {
planejamentoService.excluirPlanejamento(planejamento);
JSFHelper.addGlobalMessage("Planejamento excluído com sucesso");
planejamento = new Planejamento();
return "SUCESSO";
} catch (Exception ex) {
planejamento = new Planejamento();
logger.error(ex);
ex.printStackTrace();
JSFHelper.addGlobalMessage(ex.getMessage());
return "ERRO";
}
}
//GETS E SETS AQUI
}
o programa nao chega nem a entrar no metodo, quando eu clico no botao ele simplesmente recarrega a pagina … no logger da aplicacao ele esta simplesmente executando o filtro que eu coloquei quando ele entra em alguma pagina … alguem jah passou por isso?
soh uma coisa:
eu jah tentei fazer usando no command button actionListener="" ao invez do action="" e no metodo do bean passar um ActionEvent. Nao funcionou tambem.
rollei blz cara?
No console não da nenhuma exception nada?
Como esta seu faces-config?, configurou seu bean direitinho?, do jeito que você postou o código seu faces deveria estar ± assim:
o “managed-bean-scope” não precisar ser session tá, foi só exemplo mesmo.
Desculpa se falei alguma besteira, vai postando aí que eu ti ajudo na medida do possível.
no console nenhuma excecao. ta soh mostrando o debug do hibernate, mostrando os selects dos combos e uma mensagem dizendo que o filtro foi executado (eh soh um filtro que verifica se o usuario esta logado antes de entrar nas paginas). Nenhum erro ou excecao
o bean esta mapeado correto, porque os metodos que preenchem os combos do formulario estao funcionando
Que estranho cara, do jeito que postou deveria funcionar, não vejo mais nenhum empecilho…o commandButton deveria acessar o método…vou ver algo por aqui e posto mais alguma coisa se conseguir.
Uma vez tive um problema parecido é era por causa da conversão de tipos dos dados do formulário.Pelo que vi, vc está populando combos com mes, ano e dia né!? O registros selecionados vc está armazenando em variáveis do tipo Long.Possivelmente vc está populando usando SelectItem certo!? Veja se quando vc cria os objetos SelectItem vc está fazendo assim:
SelectItem item = new SelectItem( mes.getIdMes.longValue( ), mes.getDescricao( ) );
Repare no longValue() para recupera o valor do id do mês.Tive problemas quando fiz diferente, quando simplesmente chavama mes.getIdMes().
Não tenho certeza do motivo, mas quando mudei colocando o longValue(), consegui passar pela conversão e chamar o método.
Boa Kain_Paladian pode ser isso mesmo!, mas deveria dar um warning no console pelo menos né?
rollei cria uma página de teste a parte com um inputText apenas e tenta chamar um método do bean da mesma forma, se funcionar pode ser problema com a conversão dos combos mesmo.
[quote=Kain_Paladian]Cara, não vi nenhum problema!
Uma vez tive um problema parecido é era por causa da conversão de tipos dos dados do formulário.Pelo que vi, vc está populando combos com mes, ano e dia né!? O registros selecionados vc está armazenando em variáveis do tipo Long.Possivelmente vc está populando usando SelectItem certo!? Veja se quando vc cria os objetos SelectItem vc está fazendo assim:
SelectItem item = new SelectItem( mes.getIdMes.longValue( ), mes.getDescricao( ) );
Repare no longValue() para recupera o valor do id do mês.Tive problemas quando fiz diferente, quando simplesmente chavama mes.getIdMes().
Não tenho certeza do motivo, mas quando mudei colocando o longValue(), consegui passar pela conversão e chamar o método.
Boa sorte![/quote]
cara … funcionou …
valeu mesmo. Agora fiquei revoltado >< … como que o conversor do componente do RichFaces nao jogou nenhuma excecao? brigadao
Pois é, também fiquei revoltado por não apresentar nenhum erro.Pelo que parece, essa conversão é feita de primitivo para wrapper.Mas não encontrei nenhuma referência que explique isso…Se alguém sabe o motivo, passa ai para a galera…
Fala pessoal! Desculpa na demora da postagem (tava agarrado em outras coisas aki)!
Mas é o seguinte, eu num tava conseguindo recuperar o método na chamada do commandButton. Agora eu consigo, mas ele não recupera os valores dos campos! Tá dando o FDP do NullpointerException!
public class LogonBean extends LogonImplm{
private LogonImplm logon;
private String login;
private String senha;
public LogonBean(){
}
public String getLogin() {
if(this.login != null){
return login;
}
return null;
}
public void setLogin(String login) {
this.login = login;
}
public String getSenha() {
if(this.senha != null){
return senha;
}
return null;
}
public void setSenha(String senha) {
this.senha = senha;
}
public LogonImplm getLogon() {
return logon;
}
public void setLogon(LogonImplm logon) {
this.logon = logon;
}
}
Classe LogonImplm (gerado pelo NetBeans):
@Stateless
public class LogonImplm implements Logon {
public void clear() {
// TODO Auto-generated method stub
}
public void close() {
// TODO Auto-generated method stub
}
public boolean contains(Object arg0) {
// TODO Auto-generated method stub
return false;
}
public Query createNamedQuery(String q) {
return null;
}
public Query createNativeQuery(String arg0) {
// TODO Auto-generated method stub
return null;
}
public Query createNativeQuery(String arg0, Class arg1) {
return null;
}
public Query createNativeQuery(String arg0, String arg1) {
// TODO Auto-generated method stub
return null;
}
public Query createQuery(String arg0) {
// TODO Auto-generated method stub
return null;
}
public <T> T find(Class<T> arg0, Object arg1) {
return (T) arg1;
}
public void flush() {
// TODO Auto-generated method stub
}
public Object getDelegate() {
// TODO Auto-generated method stub
return null;
}
public FlushModeType getFlushMode() {
// TODO Auto-generated method stub
return null;
}
public <T> T getReference(Class<T> arg0, Object arg1) {
// TODO Auto-generated method stub
return null;
}
public EntityTransaction getTransaction() {
// TODO Auto-generated method stub
return null;
}
public boolean isOpen() {
// TODO Auto-generated method stub
return false;
}
public void joinTransaction() {
// TODO Auto-generated method stub
}
public void lock(Object arg0, LockModeType arg1) {
// TODO Auto-generated method stub
}
public <T> T merge(T arg0) {
// TODO Auto-generated method stub
return null;
}
public void persist(Object arg0) {
// TODO Auto-generated method stub
}
public void refresh(Object arg0) {
// TODO Auto-generated method stub
}
public void remove(Object arg0) {
// TODO Auto-generated method stub
}
public void setFlushMode(FlushModeType arg0) {
// TODO Auto-generated method stub
}
}
O erro:
15:16:34,218 FATAL [application] java.lang.NullPointerException
javax.faces.el.EvaluationException: java.lang.NullPointerException
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:91)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
at javax.faces.component.UICommand.broadcast(UICommand.java:383)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:687)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:590)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:505)
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:53)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:387)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at com.br.jrfp.services.SucessoLogonMB.executarLogon(SucessoLogonMB.java:18)
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:131)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
... 39 more
Bom acho q é só isso (como se fosse pouco!!! rsrsrsr)
Geralmente NullPointerException acontece por causa de algum erro de programação mesmo como tentar colocar algo dentro de um objeto (tipo Lista, sei lá) não inicializado, ou que retorna algum Null entende?!
Dá uma olhada no seu código para ver se não encontrar o ponto do NullPointer dentro do código. O Eclipse dá suporte para isso! O Netbeans eu não sei!