Problemas com Filtro Primefaces + Passar objeto para o Bean
5 respostas
R
ronnie.lopes
Tenho um datatable:
<p:dataTableid="dtTipoDocumento"emptyMessage="Nenhum registro encontrado."value="#{tipodocumentoBean.listTipoDocumento}"var="t"style="text-align: center; font-size: 12px;"paginator="true"rows="10"paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"rowsPerPageTemplate="10,20,50"><f:facetname="header"><h:outputTextvalue="Registro de Tipo Documentos"/></f:facet><p:columnid="nomeColumn"filterBy="#{t.nome}"headerText="Filtrar por nome"filterMatchMode="contains"><f:facetname="header"><h:outputTextvalue="Nome"/></f:facet><h:outputTextvalue="#{t.nome}"/></p:column><p:column><f:facetname="header"><h:outputTextvalue="Ações"/></f:facet><h:commandLink><h:graphicImagetitle="Editar"url="images/edite.png"value="Editar"height="16px"width="16px"/><f:ajaxevent="click"listener="#{tipodocumentoBean.preparaEditar(t)}"update="@form"/></h:commandLink><t></t><p:commandLinkactionListener="#{tipodocumentoBean.setUsuario(t)}"onclick="confirm.show()"immediate="true"><h:graphicImagevalue="images/delete.png"alt="Excluir"title="Excluir"style="border: none"height="16px"width="16px"/></p:commandLink></p:column><f:facetname="footer"><h:outputTextvalue="Há um total de #{tipodocumentoBean.count} Tipo Documento(s) cadastrado(s) no sistema."/></f:facet></p:dataTable>
O erro é o seguinte: Quando eu clico para Editar sem o Filtro, ele manda certo o objeto para o Bean e faz o que tem que fazer. Mas quando eu coloco algo no Filto do Primefaces o Botão Editar manda o objeto null para o Bean. Alguma sugestão ?
Já tentei com o:
Porém como o meu formulário está junto com o Datatable e possui campos obrigatórios, ao clicar no botão Editar, o evento de “Campo Obrigatório” é disparado, impedindo mandar o objeto para o Bean.
Eu acho que o problema é como o update do seu botão editar. Você deveria atualizar apenas o miolo do seu dialog de edição, e não o form inteiro.
R
ronnie.lopes
Não é esse o problema, testei e nada. A questão é passar o objeto para o Bean quando tem o filtro. E não para renderizar. Do seu modo continua não passando o objeto pro bean quando tem o filtro.
Roselito_Favero_da_S
Põe o código do bean pra gente. Qual o escopo dele?
R
ronnie.lopes
@ManagedBean(name="tipodocumentoBean")@ViewScopedpublicclassTipoDocumentoBean{privateTipoDocumentotipoDocumento=newTipoDocumento();privateList<TipoDocumento>listTipoDocumento;privateLongdepartamentoID;privateLoggerlogger=Logger.getLogger(TipoDocumentoBean.class);publicvoidgravar()throwsException{TipoDocumentoDaotipoDocumentoDao=newTipoDocumentoDao(this.getManager());DepartamentoDaodepartamentoDao=newDepartamentoDao(this.getManager());Departamentodepartamento=newDepartamento();logger.info("Recuperando valor do Departamento");departamento=(Departamento)departamentoDao.buscar(departamento,departamentoID);this.tipoDocumento.setDepartamento(departamento);if(this.tipoDocumento.getId_tipodoc()==null||this.tipoDocumento.getId_tipodoc()==0){//salvarthis.tipoDocumento.setId_tipodoc(null);try{tipoDocumentoDao.salvar(this.tipoDocumento);FacesContext.getCurrentInstance().addMessage(null,newFacesMessage(FacesMessage.SEVERITY_INFO,"Sucesso","Tipo documento: "+this.tipoDocumento.getNome()+"salvo com sucesso."));}catch(Exceptione){logger.error(e);FacesContext.getCurrentInstance().addMessage(null,newFacesMessage(FacesMessage.SEVERITY_ERROR,"Ocorreu um erro interno",e.getCause().toString()));return;}}else{//alterartry{tipoDocumentoDao.atualizar(this.tipoDocumento);FacesContext.getCurrentInstance().addMessage(null,newFacesMessage(FacesMessage.SEVERITY_INFO,"Sucesso","Tipo documento: "+this.tipoDocumento.getNome()+"alterado com sucesso."));}catch(Exceptione){logger.error(e);FacesContext.getCurrentInstance().addMessage(null,newFacesMessage(FacesMessage.SEVERITY_ERROR,"Ocorreu um erro interno",e.getCause().toString()));return;}}this.tipoDocumento=newTipoDocumento();this.listTipoDocumento=null;this.departamentoID=null;}publicvoidexcluir(TipoDocumentotipoDocumento){TipoDocumentoDaotipoDocumentoDao=newTipoDocumentoDao(this.getManager());try{logger.info("Removendo tipo de documento ... ");tipoDocumentoDao.remover(this.tipoDocumento,this.tipoDocumento.getId_tipodoc());logger.info("Tipo de documento excluído com sucesso!");FacesContext.getCurrentInstance().addMessage(null,newFacesMessage(FacesMessage.SEVERITY_INFO,"Sucesso","Tipo documento: "+this.tipoDocumento.getNome()+"excluído com sucesso."));}catch(Exceptione){logger.error(e);FacesContext.getCurrentInstance().addMessage(null,newFacesMessage(FacesMessage.SEVERITY_ERROR,"Ocorreu um erro interno",e.getCause().toString()));}this.tipoDocumento=newTipoDocumento();this.listTipoDocumento=null;this.departamentoID=null;}publicList<TipoDocumento>getListTipoDocumento(){if(this.listTipoDocumento==null){TipoDocumentoDaotipoDocumentoDao=newTipoDocumentoDao(this.getManager());this.listTipoDocumento=tipoDocumentoDao.getTipoDocumentos();}returnthis.listTipoDocumento;}publicLonggetCount(){TipoDocumentoDaotipoDocumentoDao=newTipoDocumentoDao(this.getManager());if(this.listTipoDocumento!=null){return(long)this.listTipoDocumento.size();}else{returntipoDocumentoDao.getCountTipoDocumentos();}}publicStringpreparaEditar(TipoDocumentotipoDocumento){this.setTipoDocumento(tipoDocumento);this.setDepartamentoID(this.getTipoDocumento().getDepartamento().getId_departamento());return"index?faces-redirect=true";}publicTipoDocumentogetTipoDocumento(){returntipoDocumento;}publicvoidsetTipoDocumento(TipoDocumentotipoDocumento){this.tipoDocumento=tipoDocumento;}publicLonggetDepartamentoID(){returndepartamentoID;}publicvoidsetDepartamentoID(LongdepartamentoID){this.departamentoID=departamentoID;}privateEntityManagergetManager(){FacesContextfc=FacesContext.getCurrentInstance();ExternalContextec=fc.getExternalContext();HttpServletRequestrequest=(HttpServletRequest)ec.getRequest();return(EntityManager)request.getAttribute("entityManager");}publicvoidlimpar(){this.tipoDocumento=newTipoDocumento();this.departamentoID=null;this.listTipoDocumento=null;}}
Ele manda para o método preparaEditar. Assim como visto acima… o escopo é ViewScoped. Tentei RequestScoped e SessionScoped e nada também. Por incrível que pareça tenho uma outra tela Usuário que implementa os mesmos métodos e também interface e funciona direitinho. Muito estranho isso