Não consigo retornar um rich:modalPanel depois de remover um registro do banco usando JPA

3 respostas
M
galera bom dia, tô pagando pau pra descobriu o q é que ta acontecendo, tô usando a mesma lógica pra inserir um registro no banco de dados e pra remover, retornarnando uma mensagem após a inserção ou remoção do referido registro. Pra inserir ta tranquilo, insere e me retorna a mensagem informando se foi ou não inserindo com sucesso. Pra remover, localiza e remove o registro sem problema, porém não ta me retornando o modalPanel informado se foi ou não inserido com sucesso. segue abaixo o código para excluir o registro. Estou usando JSF com hibernate e JPA. excluiPaciente.jsf
</style> 
          <h:form>	   
          <fieldset >                    
              <h:panelGrid columns="3" style=" height:28px;" >
              <h:outputText value="NOME:" /> 
              <h:inputText value="#{pacienteBean.paciente.nome}"  onkeydown="this.value = this.value.toUpperCase();" 
              onkeyup="this.value = this.value.toUpperCase()" size="60" style=" height:16px;"/>
              <h:commandButton action="#{pacienteBean.procuraNome}" value="Pesquisa"  style=" height:23px;"/> 
              </h:panelGrid>           
          </fieldset>
          </h:form><br></br>
          <h:form>    
      
          <rich:spacer height="8" />
          <rich:scrollableDataTable rowKeyVar="rkv" frozenColCount="1" height="100px" rendered="#{!empty pacienteBean.lista }" 
          width="553px" rows="20" columnClasses="col" id="tab" binding="#{pacienteBean.objPaciente}"
          value="#{pacienteBean.lista }" var="p" >
         
         <h:column style="width:30px" > 
             <f:facet name="header" > 
                 <h:outputText value="Id" /> 
             </f:facet> 
                 <h:outputText value="#{p.id}" /> 
         </h:column> 
         
         <h:column> 
             <f:facet name="header"> 
                 <h:outputText value="Nome" /> 
             </f:facet> 
                 <h:outputText value="#{p.nome}" />                 
         </h:column>  
         <h:column> 
             <f:facet name="header"> 
                 <h:outputText value="Endereco" /> 
             </f:facet> 
                 <h:outputText value="#{p.endereco }" />                 
         </h:column>   
         <h:column> 
             <f:facet name="header"> 
                 <h:outputText value="Nome da Mae" /> 
             </f:facet> 
                 <h:outputText style="" value="#{p.nomeMae }" />                 
         </h:column>  
          <h:column> 
             <f:facet name="header"> 
                 <h:outputText value="Data Nascimento" /> 
             </f:facet> 
                 <h:outputText value="#{p.dataNasc }" />                 
         </h:column>       
           <h:column> 
             <f:facet name="header"> 
                 <h:outputText value="Excluir" /> 
             </f:facet>         
                <a4j:commandButton action="#{pacienteBean.excluir}" image="imagens/delete.gif" oncomplete="#{pacienteBean.acao}" reRender="tab"/>
         </h:column>
         </rich:scrollableDataTable>
         <rich:spacer height="8px"/>  
       </h:form>
        <rich:modalPanel id="rmp"  width="250" height="100" autosized="true"  moveable="false" >      
              <f:facet name="header">
              <a onclick="Richfaces.hideModalPanel('rmp');">fechar</a> 
              </f:facet>                     
              <h:outputText value="Registro exluido com sucesso!" />    
         </rich:modalPanel>
         
         <rich:modalPanel id="erromp"  width="250" height="100" autosized="true"  moveable="false" >      
              <f:facet name="header">
              <a onclick="Richfaces.hideModalPanel('erromp');">fechar</a> 
              </f:facet>                     
              <h:outputText value="Erro ao excluir registro!" />    
         </rich:modalPanel>
Minha classe pacienteBean
public String excluir(){
		DAO d=new DAO();
		EntityManager em=d.getEntityManager();
		//Pega o objeto selecionado no DataTable
		paciente = (Paciente) objPaciente.getRowData();
		int codigo=paciente.getId();
		try {
			 em.getTransaction().begin();
			 paciente=em.find(Paciente.class,codigo);
		     em.remove(paciente);
		     em.getTransaction().commit();
			//limpa o objeto aluno para novas insercoes...
			paciente = new Paciente();
			this.setAcao("Richfaces.showModalPanel('rmp')");
		} catch (Exception e) {
			//se ocorrer algo errado cancela a transacao
			this.setAcao("Richfaces.showModalPanel('erromp')");
			em.getTransaction().rollback();
		}finally{
			//fecha a sessao com o banco de dados.
			em.close();
		}
		return null;
	}
private String acao;

public void setAcao(String acao) {
		this.acao = acao;
	}
	public String getAcao() {
		return acao;
	}

3 Respostas

M

galera olha só, descobri que o problema ta no scrollableDataTable, se eu usar rich:dataTable funfa que é uma blz, mas eu na verdade eu tô querendo usar o scrollableDataTable, alguém pode me dizer onde é q ta o erro?

ibispo

Uma sugestão. Não é o melhor dos mundos, mas quando a água começa a bater na b… o negócio fica roça…

Coloque então o rich:dataTable e envolva ele numa <div>. Veja:

&lt;div style="height: altura_desejada; overflow: auto;"&gt;

   &lt;rich:dataTable var="row"
       value="#{seuBean.suaCollection}"
       width="900px" border="0" cellspacing="0"
       cellpadding="0"&gt;

       &lt;rich:column style="text-align:left;"&gt;
           &lt;f:facet name="header"&gt;
               &lt;h:outputText value="TituloColuna" /&gt;
           &lt;/f:facet&gt;
           &lt;h:outputText value="#{row.informacao}"/&gt;
       &lt;/rich:column&gt;

&lt;/div&gt;

No dataTable sem definir o parâmetro “rows” ele vai direto. Envolvendo numa div você terá o scroll necessário.

Espero ter ajudado.

M

valeu pela dica brother, funcionou q é um beleza.

Obrigado!

Criado 11 de maio de 2011
Ultima resposta 14 de mai. de 2011
Respostas 3
Participantes 2