Problemas c/ evento onComplete do primefaces jsf 2.0, ñ se comportando como a4j:support [RESOLVIDO]
3 respostas
lessandronp
Olá pessoal, boa tarde.
Estou com um problema tremendo ao executar o evento onComplete do componente primefaces o qual dá suporte ao jsf 2.0
Anteriormente no jsf 1.2 utilizava o a4j:support, e este se comportava corretamente, onde o método era chamado e após ser concluído era exibido um alert.
Porém com o jsf 2.0 se comporta de maneira diferente, observem o código abaixo,
Tenho algo como:
Nesse caso o evento oncomplete está se comportando de maneira semelhante ao evento onclick, onde a action salvar não está sendo executada
anteriormente, e ao ser finalizada um alert é demonstrado. O alert é exibido assim que o botão é acionado, e o método salvar nem foi chamado ainda.
Alguém teria alguma solução para esse problema?
Abs,
Lessandro
packagebr.com.notaroberto.controller;//~--- non-JDK imports --------------------------------------------------------importjava.util.List;importjava.util.ResourceBundle;importjavax.faces.bean.ManagedBean;importbr.com.notaroberto.dao.UsuarioDAO;importbr.com.notaroberto.model.Perfil;importbr.com.notaroberto.model.Usuario;importbr.com.notaroberto.util.Constantes;importbr.com.notaroberto.util.JsfUtil;importjavax.faces.bean.SessionScoped;importjavax.faces.component.UIComponent;importjavax.faces.context.FacesContext;importjavax.faces.convert.Converter;importjavax.faces.convert.FacesConverter;@ManagedBean(name="usuarioController")@SessionScopedpublicclassUsuarioController{privateUsuariousuario;privateUsuarioDAOusuarioDAO;privateintidUsuarioSelecionado;privateList<Usuario>listaUsuarios;privateList<Perfil>listaPerfis;privateStringmensagem,msgDialog;publicUsuariogetSelecionado(){if(usuario==null){usuario=newUsuario();idUsuarioSelecionado=-1;}else{if(idUsuarioSelecionado!=-1){usuario=recuperaUsuario(idUsuarioSelecionado);}}returnusuario;}privateUsuarioDAOgetUsuarioDAO(){usuarioDAO=newUsuarioDAO();returnusuarioDAO;}publicvoidsetListaUsuarios(List<Usuario>listaUsuarios){this.listaUsuarios=listaUsuarios;}publicList<Usuario>getListaUsuarios(){returnlistaUsuarios;}publicList<Perfil>getListaPerfis(){returnlistaPerfis;}publicvoidsetListaPerfis(List<Perfil>listaPerfis){this.listaPerfis=listaPerfis;}publicintgetIdUsuarioSelecionado(){returnidUsuarioSelecionado;}publicvoidsetIdUsuarioSelecionado(intidUsuarioSelecionado){this.idUsuarioSelecionado=idUsuarioSelecionado;}publicStringgetMensagem(){returnmensagem;}publicvoidsetMensagem(Stringmensagem){this.mensagem=mensagem;}publicStringgetMsgDialog(){returnmsgDialog;}publicvoidsetMsgDialog(StringmsgDialog){this.msgDialog=msgDialog;}publicStringpreparaLista(){recriaModelo();setListaUsuarios(getUsuarioDAO().buscaTodos());returnConstantes.URL_MENU_USUARIO;}publicStringcarregaListaPerfis(){PerfilControllerperfilController=newPerfilController();perfilController.preparaLista();setListaPerfis(perfilController.getListaPerfis());returnnull;}publicStringpreparaCriacao(){usuario=newUsuario();idUsuarioSelecionado=-1;carregaListaPerfis();returnConstantes.URL_INCLUIR_USUARIO;}publicStringpreparaAlteracao(){carregaListaPerfis();returnConstantes.URL_ALTERAR_USUARIO;}publicUsuariorecuperaUsuario(intidUsuarioSelecionado){UsuarioususarioRecuperado=null;for(inti=0;i<listaUsuarios.size();i++){if(listaUsuarios.get(i).getIdUsuario()==idUsuarioSelecionado){ususarioRecuperado=listaUsuarios.get(i);}}returnususarioRecuperado;}publicvoidsalvar(){setMensagem("");setMsgDialog("");try{getUsuarioDAO().salva(usuario);setMensagem(ResourceBundle.getBundle("/message").getString("usuario.criadoSucesso"));setMsgDialog(Constantes.SHOW_DIALOG);}catch(Exceptione){setMensagem(e+" "+ResourceBundle.getBundle("/message").getString("PersistenceErrorOccured"));setMsgDialog(Constantes.SHOW_DIALOG);}}publicStringalterar(){try{getUsuarioDAO().altera(usuario);JsfUtil.addSuccessMessage(null,ResourceBundle.getBundle("/message").getString("UsuarioUpdated"));return"Exibe";}catch(Exceptione){JsfUtil.addErrorMessageExcecao(e,ResourceBundle.getBundle("/message").getString("PersistenceErrorOccured"));returnnull;}}publicStringexcluir(){try{getUsuarioDAO().exclui(usuario);JsfUtil.addSuccessMessage(null,ResourceBundle.getBundle("/message").getString("UsuarioDeleted"));return"Exibe";}catch(Exceptione){JsfUtil.addErrorMessageExcecao(e,ResourceBundle.getBundle("/message").getString("PersistenceErrorOccured"));returnnull;}}privatevoidrecriaModelo(){setListaUsuarios(null);}publicStringautenticaUsuario(){Stringpagina=null;usuario=getUsuarioDAO().buscaLoginSenha(getSelecionado().getDsLogin(),getSelecionado().getDsSenha());if(usuario==null){JsfUtil.addErrorMessage("form:iphMensagem",ResourceBundle.getBundle("/message").getString("usuario.naoEncontrado"));}else{pagina=Constantes.URL_MENU_HOME;}returnpagina;}@FacesConverter(forClass=Usuario.class,value="usuarioConverter")publicstaticclassUsuarioControllerConverterimplementsConverter{@OverridepublicObjectgetAsObject(FacesContextfacesContext,UIComponentcomponent,Stringvalue){if((value==null)||(value.length()==0)){returnnull;}UsuarioControllerusuarioController=(UsuarioController)facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(),null,"usuarioController");returnusuarioController.getUsuarioDAO().buscaPeloID(getID(value));}IntegergetID(Stringvalue){Integerid;id=Integer.valueOf(value);returnid;}StringgetStringID(Integervalue){StringBuffersb=newStringBuffer();sb.append(value);returnsb.toString();}@OverridepublicStringgetAsString(FacesContextfacesContext,UIComponentcomponent,Objectobject){if(object==null){returnnull;}if(objectinstanceofUsuario){Usuarioo=(Usuario)object;returngetStringID(o.getIdUsuario());}else{thrownewIllegalArgumentException("objeto "+object+" possui o tipo "+object.getClass().getName()+"; tipo esperado: "+UsuarioController.class.getName());}}}}
lessandronp
Detalhe: Tentei utilizar o f:ajax agora, mas também não funcionou. Utilize como exemplo o primeiro código que postei aqui substituindo o <p:commandButton> com o evento onComplete.