Validação em form com varios botões

4 respostas Resolvido
jsfjava
jorge.david

Prezados,
Estou com uma duvida que até agora não consegui pensar em uma solução.
Tenho uma tela onde tenho 03 botões em um form. Botão Novo, Salvar e Buscar.
Porém, eu quero que a validação do formulário seja somente quando eu pressionar o botão salvar dados. O que esta acontecendo é que independente do botão que pressiono a validação do JSF é executada e a mensagem aparece com o possível erro para o usuário.

Segue parte do código:

<h:form>
        <p:messages autoUpdate="true" showDetail="true"></p:messages>
        <p:fieldset legend="RMA - Grupo Natubell">
        <p:toolbar>
            <p:toolbarGroup>
                <p:commandButton value="Novo" icon="ui-icon-document" action="#{rmaBean.novo()}" update="@form"></p:commandButton>
                <p:commandButton value="Salvar" icon="ui-icon-disk" action="#{rmaBean.salvar()}" update="@form" disabled="#{rmaBean.busca == true}"></p:commandButton>
                <p:commandButton value="Buscar" icon="ui-icon-search" action="#{rmaBean.buscar()}" update="@form" immediate="false"></p:commandButton>
            </p:toolbarGroup>
        </p:toolbar>
        <p:panelGrid columns="6" rendered="#{rmaBean.busca == false}">
                
                <h:outputLabel value="Cliente"></h:outputLabel>
                <p:inputText value="#{rmaBean.entidade.cliente}" required="true" requiredMessage="Campo nome obrigatorio" immediate="true"></p:inputText>
                
                <h:outputLabel value="Vendedor"></h:outputLabel>
                <p:inputText value="#{rmaBean.entidade.vendedora}" required="true" requiredMessage="Campo vendedor obrigatorio" immediate="true"></p:inputText>

                <h:outputLabel value="Data Recl"></h:outputLabel>
                <p:inputMask value="#{rmaBean.entidade.datarecl}" mask="99/99/9999" required="true" requiredMessage="Campo Data Recl obrigatorio" immediate="true"></p:inputMask>

                <h:outputLabel value="Descrição do Problema"></h:outputLabel>
                <p:inputText value="#{rmaBean.entidade.descricao}" required="true" requiredMessage="Campo descrição obrigatorio" immediate="true"></p:inputText>

                <h:outputLabel value="CodProd"></h:outputLabel>
                <p:inputText value="#{rmaBean.entidade.codprod}" required="true" requiredMessage="Campo CodProd obrigatorio" immediate="true"></p:inputText>
             
                <h:outputLabel value="Qtd"></h:outputLabel>
                <p:inputText value="#{rmaBean.entidade.qdtavar}" required="true" requiredMessage="Campo Qtd obrigatorio" immediate="true"></p:inputText>

                <h:outputLabel value="Empresa Orig"></h:outputLabel>
                <p:inputText value="#{rmaBean.entidade.empresa}" required="true" requiredMessage="Campo Empresa obrigatorio" immediate="true"></p:inputText>

                <h:outputLabel value="NF RMA"></h:outputLabel>
                <p:inputText value="#{rmaBean.entidade.nfrma}"></p:inputText>

                <h:outputLabel value="PEV"></h:outputLabel>
                <p:inputText value="#{rmaBean.entidade.pev}" required="true" requiredMessage="Campo PEV obrigatorio" immediate="true"></p:inputText>

                <h:outputLabel value="Obs"></h:outputLabel>
                <p:inputText value="#{rmaBean.entidade.obs}"></p:inputText>

                <h:outputLabel value="Nf dev"></h:outputLabel>
                <p:inputText value="#{rmaBean.entidade.nfdevo}"></p:inputText>

                <h:outputLabel value="NF Atual"></h:outputLabel>
                <p:inputText value="#{rmaBean.entidade.nfatual}"></p:inputText>

                <h:outputLabel value="PEV Atual"></h:outputLabel>
                <p:inputText value="#{rmaBean.entidade.pevatual}"></p:inputText>

                <h:outputLabel value="Data Fim"></h:outputLabel>               
                
                <p:inputMask value="#{rmaBean.entidade.datafim}" mask="99/99/9999"></p:inputMask>

            </p:panelGrid>

            

            <p:dataTable value="#{rmaBean.entidades}" var="rma" rendered="#{rmaBean.busca == true}">
                <p:column>
                    <p:commandButton value="Editar" action="#{rmaBean.editar(rma)}" update="@form" style="font-size: 10px;width: 60px" icon="ui-icon-pencil"></p:commandButton>
                    <p:commandButton value="Deletar" action="#{rmaBean.deletar(rma)}" update="@form" style="font-size: 10px;width: 60px" icon="ui-icon-circle-close"></p:commandButton>
                    
                </p:column>
            <p:column headerText="Cliente" sortBy="#{rma.cliente}" filterBy="#{rma.cliente}"  class="text">
                    <h:outputText value="#{rma.cliente}"  class="text"></h:outputText>
                </p:column>

                <p:column headerText="Vendedora" sortBy="#{rma.vendedora}"  class="text">
                    <h:outputText value="#{rma.vendedora}"  class="text"></h:outputText>
                </p:column>

                <p:column headerText="Data Recl" filterBy="#{rma.datarecl}"  class="text">
                    <h:outputText value="#{rma.datarecl}"  class="text"></h:outputText>
                </p:column>

                <p:column headerText="Descricao"  class="text">
                    <h:outputText value="#{rma.descricao}"  class="text"></h:outputText>
                </p:column>

                <p:column headerText="CodProd" sortBy="#{rma.codprod}" filterBy="#{rma.codprod}"  class="text">
                    <h:outputText value="#{rma.codprod}"  class="text"></h:outputText>
                </p:column>
      
                <p:column headerText="Qtd" sortBy="#{rma.qdtavar}"  class="text" >
                    <h:outputText value="#{rma.qdtavar}"  class="text"></h:outputText>
                </p:column>

                <p:column headerText="Empresa"  class="text">
                    <h:outputText value="#{rma.empresa}"  class="text"></h:outputText>
                </p:column>

                <p:column headerText="NF RMA"  class="text">
                    <h:outputText value="#{rma.nfrma}"  class="text"></h:outputText>
                </p:column>

                <p:column headerText="PEV" filterBy="#{rma.pev}"  class="text">
                    <h:outputText value="#{rma.pev}"  class="text"></h:outputText>
                </p:column>

                <p:column headerText="Obs"  class="text">
                    <h:outputText value="#{rma.obs}"  class="text"></h:outputText>
                </p:column>

                <p:column headerText="NF dev"  class="text">
                    <h:outputText value="#{rma.nfdevo}"  class="text"></h:outputText>
                </p:column>

                <p:column headerText="NF Atual"  class="text">
                    <h:outputText value="#{rma.nfatual}"  class="text"></h:outputText>
                </p:column>

                <p:column headerText="PEV Atual"  class="text">
                    <h:outputText value="#{rma.pevatual}" class="text"></h:outputText>
                </p:column>

                <p:column headerText="Data Fim"  class="text">
                    <h:outputText value="#{rma.datafim}"  class="text"></h:outputText>
                </p:column>
            </p:dataTable>

        </p:fieldset>

    </h:form>

4 Respostas

RaulCrash

Usa o immediate true nos commandButton que você deseja pular o ciclo de vida de validação. Uma dica se assim aceitar, se irás p/ outra tela não precisas do update no form… Concorda? Pois não desejas atualizar os componentes.

jorge.david

Eu alterei o immediate como vc me disse, mas ainda ele esta passando pela validação. O que será que fazendo de errado?
Assim, ele vai para a proxima ação porem exibe a msg dos campos que estao em branco…

Com relação ao update eu estou trabalhando o CRUD na mesma tela.

<p:toolbarGroup>
        <p:commandButton value="Novo" icon="ui-icon-document" action="#{rmaBean.novo()}" update="@form" immediate="true"></p:commandButton>
        <p:commandButton value="Salvar" icon="ui-icon-disk" action="#{rmaBean.salvar()}" update="@form" disabled="#{rmaBean.busca == true}"></p:commandButton>
        <p:commandButton value="Buscar" icon="ui-icon-search" action="#{rmaBean.buscar()}" update="@form" immediate="true"></p:commandButton>
    </p:toolbarGroup>
RaulCrash
Solucao aceita

Na maquina que estou não tenho nenhum projeto JSF, mas o immediate faz isto. Tava reparando que os input tem immediate … os retire… Tem o atributo resetValues tbm, ele faz esta básica limpeza do formulario.

http://www.primefaces.org/showcase/ui/misc/resetInput.xhtml

jorge.david

Raul,

Tirei o immediate de todos os campos e funcionou!

Obrigado

Criado 22 de dezembro de 2016
Ultima resposta 22 de dez. de 2016
Respostas 4
Participantes 2