Reset form Primefaces

Galera, eu novamente.

Criei um xhtml com dois forms, um para informação dos dados e um para consulta.
Ao consultar e tentar editar, até ai ta tudo blz, porem se der algum erro ao gravar (compos requeridos) o form não reseta mais.

Tenho um botão “Gravar” e um “Limpar”, o botão limpar não simplesmente reset o form, mas sim executa um action com o metodo “novoRegistro()” onde instancio um novo objeto. Mas mesmo assim a tela não limpa, continua com os dados da edição anterior.

Obs.: O erro so ocorre quando tento editar e ao gravar falta campo requerido.

Alguem tem um pulo do gato ai pra resolver isso?

Obrigado.

Provavelmente o formulário não chega a executar a ação, pois não passa da fase de validação no ciclo jsf. Tente utilizar o atributo immediate que provavelmente irá resolver esse seu problema.
Sugiro uma lida no ciclo de vida de uma requisição jsf, e entender o que o immediate realmente faz, isso vai ser muito util.

ja tentei, veja abaixo como está o codigo:


<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:p="http://primefaces.prime.com.tr/ui"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                template="../template/paginapadrao.xhtml">
    <ui:debug/>
    <ui:define name="corpo">

        <p:tabView id="tabcontrol" widgetVar="tabCad">  
            <p:tab title="Cadastro">

                <h:form id="frmCad" prependId="false">
                    <p:panel id="pnl" header="Cadastro de Estado">                     
                        <p:focus/>              
                        <h:panelGrid columns="3">     
                            <h:outputText value="Operação"/>  
                            <p:inputText id="operacao" style="color: black; background-color: LightBlue; text-align: center" 
                                         disabled="true" 
                                         value="#{estadoBean.operacao}"/>  
                            <p:message for="operacao"/>  

                            <h:outputText value="* Descrição" />  
                            <p:inputText id="descricao" value="#{estadoBean.estado.descricao}"
                                         required="true"
                                         maxlength="50" size="50"
                                         requiredMessage="Campo obrigatório"/>  
                            <p:message for="descricao"/>  

                            <h:outputText value="* UF" />  
                            <p:inputText id="uf" value="#{estadoBean.estado.uf}" 
                                         required="true" 
                                         maxlength="2" 
                                         requiredMessage="Campo obrigatório">
                            </p:inputText>  
                            <p:message for="uf"/>                              

                            <h:outputText value="Código IBGE:" />  
                            <p:inputText id="codibge" value="#{estadoBean.estado.codibge}"
                                         converterMessage="Conteúdo do campo inválido (somente números)"
                                         maxlength="7">
                                <f:convertNumber  integerOnly="true" groupingUsed="false"/>
                            </p:inputText>  
                            <p:message for="codibge"/>  

                            <h:outputText value="* Pais:" />                              
                            <h:selectOneMenu id="pais" required="true" requiredMessage="Campo obrigatório"
                                             value="#{estadoBean.paisIDSelecionado}">
                                <f:selectItem itemLabel="Selecione um país"/>  
                                <f:selectItems value="#{paisBean.paises}" var="p"
                                               itemLabel="#{p.descricao}"
                                               itemValue="#{p.id}"/>
                            </h:selectOneMenu>
                            <p:message for="pais"/>                              

                        </h:panelGrid> 

                        <f:facet name="footer">
                            <p:commandButton value="Gravar" 
                                             action="#{estadoBean.salvar()}"
                                             update="frmCad, alertas, frmGrid"/>
                            <p:commandButton value="Limpar" immediate="true"
                                             action="#{estadoBean.novoRegistro()}"
                                             update="frmCad"/>
                        </f:facet>
                    </p:panel>                 
                </h:form>
                
                <h:form>
                    
                </h:form>

            </p:tab>

            <p:tab title="Pesquisa">            

                <h:form id="frmGrid">
                    <p:panel id="pnlGrid" header="Estados cadastrados">
                        <p:dataTable id="grid" var="e" value="#{estadoBean.estados}" 
                                     paginator="true" 
                                     selection="#{estadoBean.estado}" selectionMode="single" 
                                     emptyMessage="#{constantesBean.constanteSemRegistro}" rows="10"
                                     paginatorAlwaysVisible="false"
                                     paginatorPosition="top">  
                            
                            <p:column headerText="Nome" filterBy="#{e.descricao}" sortBy="#{e.descricao}">  
                                <h:outputText value="#{e.descricao}" />  
                            </p:column>  
                            <p:column headerText="UF" filterBy="#{e.uf}" sortBy="#{e.uf}">  
                                <h:outputText value="#{e.uf}" />  
                            </p:column>                         
                            
                            <p:column headerText="Código IBGE" filterBy="#{e.codibge}" sortBy="#{e.codibge}">  
                                <h:outputText value="#{e.codibge}" />  
                            </p:column> 
                            
                            <p:column headerText="País" filterBy="#{e.pais.descricao}" sortBy="#{e.pais.descricao}">  
                                <h:outputText value="#{e.pais.descricao}" />  
                            </p:column>                         
                            
                             <p:column style="width:60px" >
                                <p:commandButton image="ui-icon-pencil" styleClass="botoesGrid"
                                                 update="frmCad, tabcontrol"
                                                 process="@this">
                                    <f:setPropertyActionListener target="#{estadoBean.estado}"
                                                                 value="#{e}"/>
                                </p:commandButton>

                                <p:commandButton image="ui-icon-circle-close" styleClass="botoesGrid"
                                                 update="grid"
                                                 process="@this"
                                                 onclick="confirmarDelete.show()">
                                    <f:setPropertyActionListener target="#{estadoBean.estado}"
                                                                 value="#{e}"/>

                                </p:commandButton>
                            </p:column>

                        </p:dataTable> 

                        <h:panelGrid columns="2" cellspacing="10">
                            <p:commandLink value="Atualizar" action="#{estadoBean.novaPesquisa()}" update="grid"/>
                            <h:commandLink value="Exportar para Excel" type="">    
                                <p:dataExporter type="xls" target="grid" fileName="estados" excludeColumns="3,4"/>
                            </h:commandLink>
                        </h:panelGrid>
                    </p:panel>
                </h:form>
            </p:tab>
        </p:tabView>


        <p:confirmDialog header="Confirmação" message="Confirma exclusão do registro?"
                         appendToBody="true" modal="true" showEffect="explode"
                         widgetVar="confirmarDelete" 
                         severity="alert">
            <h:form>                
                <p:commandButton value="Sim" actionListener="#{estadoBean.deletar()}" 
                                 update="frmGrid, alertas" 
                                 onsuccess="confirmarDelete.hide()">
                </p:commandButton>
                <p:commandButton value="Não" oncomplete="confirmarDelete.hide()"/>
            </h:form>
        </p:confirmDialog>
    </ui:define>

</ui:composition>

Já debugou e viu se o método está sendo chamado??? Olhando aqui, unica coisa que eu consigo pensar era de não ter immediate no commandbutton e ele não passar da fase de validação do jsf.
Outra coisa, posso estar enganado, mas se for chamar alguma action no managed bean, não precisa colocar o metodo com () no final, como na action="#{estadoBean.salvar()}" , apenas action="#{estadoBean.salvar}", tirando casos que vc usa recursos da el para passar algum parametro na chamada do método.
Verifica se isso não está causando alguma problema.

Ja debuguei sim, o metodo é executado.

Ta tudo funcionando, mas se der erro ao gravar, não limpa mais.
Sobre o metodo ter () ao final, não tem problema, funciona das duas formas.

Vou estudar mais pra ver o que pode ta errado.

vlw

Nesse caso não sei, pode ser algo no update do primefaces, já tive problemas com isso.
Experimenta colocar sem ser ajax, para ver se o formulário é preenchido corretamente( no caso em branco devido a ser um novo objeto). Se funcionar, é algo com o update do primefaces, dai tenta colocar dentro de uma outra div ou componente.

Fala rickcs tudo bom?

Cara estou com o mesmo problema que você.
Você conseguiu solucionar este problema?

Obrigado,
Adilson

[quote=adilson_atalla]Fala rickcs tudo bom?

Cara estou com o mesmo problema que você.
Você conseguiu solucionar este problema?

Obrigado,
Adilson[/quote]

no botão ou commandlink q vc está usando pra fechar, limpar ou cancelar uma ação… coloque o atributo:

immediate="true"

e use o

update=":seuForm"

ou

update="seuForm"

depende da versão do JSF :wink:

comigo funcionou assim :wink:

Pois é. Tente o que darkan666 disse. Eu já tive o mesmo problema.
Na época eu descobri que quando eu recarregava a página o formulário limpava. Daí usei o firebug pra ver o id que era montado para o formulário e quando usei o id gerado ele funcionou. Nunca tive problema com isso no richfaces, mas no primefaces é assim. Tem que usar o id gerado pelo fremework.

Use o firebug pra ver como está sendo montado o id do seu formuário.

ex.: tabcontrol:frmCad

Tenta isso:

<p:commandButton value="Limpar" ajax="false" type="reset" />

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();
}
1 curtida