Primefaces - Limpar form

9 respostas
E

Olá Pessoal !!!

Tenho um exemplo de formulário de cadastro que grava corretamente, mas gostaria de limpar os registros dele ao fechar. Segue o código de como chamo o form.

<p:layoutUnit position="left" width="200" header="Atividades" resizable="true" closable="true" collapsible="true">

           <h:form prependId="false">

               <p:commandButton value="Novo"
                                action="#{PastelMB.novoPastel}"
                                update="gerNovo, formCad, infoCad"
                                oncomplete="dialogCad.show()" />
            </h:form>

    </p:layoutUnit>

No MB

public void novoPastel(){
        pastel = new Pastel();
        System.out.println("Criando novo");
    }

E o dialog

<p:dialog header="Gerência" widgetVar="dialogCad" 
              resizable="false" modal="true" width="500">

    <p:outputPanel id="gerNovo">

        <h:form prependId="false" id="formCad">

                <p:messages id="avisoCad"/>

                <h:panelGrid id="infoCad" columns="2" style="margin-bottom:10px">

                        <h:outputLabel value="Nome:"/>
                        <h:inputText id="nomeCad" value="#{PastelMB.pastel.nome}"
                                     required="true" requiredMessage="Campo [Nome] obrigatório">
                        <f:validateLength minimum="2" maximum="100" />
                        </h:inputText>

                        <h:outputLabel value="Tamanho:"/>
                        <h:inputText id="tamanhoCad" value="#{PastelMB.pastel.tamanho}"
                                     required="true" requiredMessage="Campo [Tamanho] obrigatório">
                        <f:validateLength maximum="100" />
                        </h:inputText>

                        <p:commandButton value="Salvar"
                                         actionListener="#{PastelMB.cadastra}"
                                         oncomplete="dialogCad.show(); "
                                         update="formCad"
                        />

                    <p:commandButton oncomplete="dialogCad.hide();"
                                     value="Cancelar" />

                </h:panelGrid>
            </h:form>

     </p:outputPanel>

</p:dialog>

Problema que quando fecho o dialog e abro novamente os dados dos campos continuam. Exibe a mensagem “Criando novo” portando passa por ali. O que posso fazer para corrigir ?

Obrigado

9 Respostas

O

no seu método após salvar. reinicia novamente seu objeto.
objeto=new Objeto();

P

dentro do seu metodo cadastra, chame o metodo novo e de um update no panel

E

Certo. Ao cadastrar funciona.
Problema é se cancelar o form e abrir novamente. Acredito que poderia ser algo no evento onHide do dialog. Mas por ele não consigo chamar #{PastelMB.novoPastel}.
Mas como no botão “novo” já instancia acredito que nem precisaria isso.

E

Meu problema persiste. Ao abir o dialog digitar e fechar a janela funciona normalmente. Mas se eu deixar um campo obrigatório, por exemplo, permanece na mesma janela. Aí se eu fechar e abrir novamente lá estão os dados que eu digitei e não deveria aparecer.

Código ficou assim atualmente:

<p:dialog header="Cadastro de Pastel" widgetVar="dialogCad"
              resizable="false" modal="true" width="500">

        <h:form prependId="false" id="formCad" >

                <p:messages id="avisoCad"/>

                <h:panelGrid id="infoCad" columns="2" style="margin-bottom:10px">

                        <h:outputLabel value="Nome:"/>
                        <h:inputText id="nomeCad" value="#{PastelMB.pastel.nome}"
                                     required="true" requiredMessage="Campo [Nome] obrigatório" >
                        <f:validateLength minimum="2" maximum="100" />
                        </h:inputText>

                        <h:outputLabel value="Tamanho:"/>
                        <h:inputText id="tamanhoCad" value="#{PastelMB.pastel.tamanho}"
                                     required="true" requiredMessage="Campo [Tamanho] obrigatório" >
                        <f:validateLength maximum="100" />
                        </h:inputText>

                        <p:commandButton value="Salvar"
                                         actionListener="#{PastelMB.cadastra}"
                                         oncomplete="dialogCad.show();"
                                         update="tabelaPastel, formCad">
                        </p:commandButton>

                    <p:commandButton oncomplete="dialogCad.hide();"
                                     immediate="true"
                                     update="formCad"
                                     value="Cancelar">
                    </p:commandButton>


                </h:panelGrid>
            </h:form>
</p:dialog>
P

Você tem que achar uma lógica para dar o new Object() no seu bean dentro da sua neessidade.

E

Eu dou new toda vez que clico no botão “novo”. Uma causa quando ocorre erro no formulário pode ser que fica na memória. Algo assim. :?

F

Tente ao iniciar o metodo criar um novo objeto;
e ao salvar este objeto de um NULL nele, caso tenha lista de NULL nela tambem

acho que deve resolver…

C

O tópico é antigo… mas tive a mesma dúvida e acho que isso responde… utilizando um closeListener, exemplo do Show Case do Prime…

Na sua Página:

<p:growl id="growl" showDetail="true"/>  
<p:growl id="growl" showDetail="true"/>  
                           
<h:outputLink value="javascript:void(0)" onclick="dlg.show()">Show the Picture of the Day</h:outputLink>  
  
<p:dialog id="picture" widgetVar="dlg" header="Picture of the Day" width="425" height="300"  
            closeListener="#{dialogBean.handleClose}"    
            onCloseUpdate="growl"    
            resizable="false" showEffect="clip" hideEffect="clip">  
       
    <h:form>  
        <p:graphicImage value="/images/nature3.jpg" />  
    </h:form>  
       
</p:dialog>

No seu Managed Bean

public class DialogBean {   

public void handleClose(CloseEvent event) {   
        FacesContext facesContext = FacesContext.getCurrentInstance();   
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,    
            event.getComponent().getId() + " closed", "So you don't like nature?");   
           
        facesContext.addMessage(null, message);   
    }   
}
C

Ressuscitando o tópico.
Precisei dessa solução, vou colocar a forma que eu utilizei para resolver o meu problema.

Page:

<p:commandButton value="Salvar" action="#{pessoaController.salvar}" update="@form" />

Java code:

public void salvar() {
    pessoaService.save(product);
    pessoa= new Pessoa();
}
Criado 12 de janeiro de 2011
Ultima resposta 20 de jun. de 2013
Respostas 9
Participantes 7