Problemas com campo obrigatório + Dialgos

16 respostas
R

Boa tarde galera, tudo certo? Bem, na minha aplicação tenho alguns campos (dentre eles alguns como obrigatórios) e um dialog.
Em especial, no campo de usuário, tenho dois inputText: um em que a pessoa digita o código do usuario, e apartir daí mostra o nome do mesmo no outro inputText. Caso a pessoa não saiba o código, ela clica no comandButton ( que apartir do click abrirá o dialog) e escolhe o usuário, sendo que nesse processo é “jogado” o código dele para um input e o nome para outro.
Porém, estou com um problema: se a pessoa clicar no botão para selecionar o usuário que está DENTRO DO DIALOG… ele chama TODOS os campos OBRIGATÓRIOS da tela. Não sei mais oque fazer para solucionar o problema…
Abaixo, parte do xhtml:

<?xml version="1.0" encoding="UTF-8"?>    
<!--    
To change this template, choose Tools | Templates    
and open the template in the editor.    
-->    
<!DOCTYPE html>    
<html xmlns="http://www.w3.org/1999/xhtml"    
      xmlns:ui="http://java.sun.com/jsf/facelets"    
      xmlns:f="http://java.sun.com/jsf/core"    
      xmlns:h="http://java.sun.com/jsf/html"    
      xmlns:treap="http://java.sun.com/jsf/composite/treap"    
      xmlns:p="http://primefaces.org/ui">    
    <body>    
        <ui:composition template="./default_layout_with_menu.xhtml">    
            <ui:define name="titulo-pagina">    
                Reservas    
            </ui:define>    
            <ui:define name="content">    
                <treap:ajaxStatus/>    
                <p:tabView id="tab" activeIndex="#{reservasJsfBean.indiceAbaSelecionada}" widgetVar="tab1">    
                    <p:tab title="Cadastro" id="tabForm" rendered="#{sec:ifNotGranted('USR')}">    
    
                         
    
                        <p:dialog style="position: fixed" closable="true" appendToBody="false" header="Pesquisa de Usuário" resizable="false" widgetVar="usuarioDialog" id="usuarioDlg" modal="true">    
                            <p:panel header="Filtros de Consulta" id="parametrosUsuario">    
                                <p:growl id="grow4" life="4000"/>    
                                <table border="0" cellpadding="2" cellspacing="0" style="margin-right: 40px">    
                                    <h:panelGrid columns="2" width="100%">    
                                        <h:panelGrid columns="2">    
    
                                            <tr>    
                                                <td align="right">Código:</td>    
                                                <td>    
                                                    <p:inputMask mask="9?9999" placeHolder="" size="6" onfocus="this.value='';" value="#{usuariobibJsfBean.usuCodigo}"/>    
                                                </td>    
                                            </tr>    
    
                                            <tr>    
                                                <td align="right">Nome:</td>    
                                                <td>    
                                                    <p:inputText size="20" style="width: 200%" onfocus="this.value='';" value="#{usuariobibJsfBean.usuNome}"/>    
                                                </td>    
                                            </tr>    
    
                                        </h:panelGrid>    
                                    </h:panelGrid>    
                                    <tr>    
                                        <td>    
                                            <p:defaultCommand target="BtnfiltraUsuario" />    
                                            <p:commandButton id="BtnfiltraUsuario" actionListener="#{usuariobibJsfBean.atualizar()}" value="Consultar" update="tblUsuarioList" process="parametrosUsuario" image="search"/>    
                                        </td>    
                                    </tr>    
                                    <br/>    
    
                                </table>    
    
                                <br/>    
                                <div style="height:500px;overflow-x:auto;overflow-y:scroll;width: 1000px">    
                                    <p:dataTable id="tblUsuarioList"    
                                                 rowStyleClass="#{empty rowIx or rowIx mod 2 ne 0 ? 'even-row' : 'odd-row'}"    
                                                 rowIndexVar="rowIx"    
                                                 var="usuario"    
                                                 value="#{usuariobibJsfBean.usuariosList}"    
                                                 emptyMessage="Nenhum registro encontrado."    
                                                 paginator="true"    
                                                 paginatorPosition="bottom"    
                                                 lazy="true"    
                                                 rows="10" pageLinks="10"    
                                                 paginatorTemplate="{CurrentPageReport} {FirstPageLink}    
                                                 {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}    
                                                 Exibir: {RowsPerPageDropdown}    
                                                 Registros Encontrados: #{usuariobibJsfBean.usuariosList.rowCount}"    
                                                 rowsPerPageTemplate="10,25,35,50">    
                                        <p:column headerText="Código" sortBy="#{usuario.usuCodigo}" width="60" resizable="true">    
                                            #{usuario.usuCodigo}    
                                        </p:column>    
                                        <p:column headerText="Nome" sortBy="#{usuario.usuNome}" width="220">    
                                            #{usuario.usuNome}    
                                        </p:column>    
                                        <p:column headerText="Cidade" sortBy="#{usuario.usuCidade.nome}" width="220">    
                                            #{usuario.usuCidade.nome}    
                                        </p:column>    
                                        <p:column headerText="Data de Nascimento" sortBy="#{usuario.usuDtnasc}" width="220">    
                                            <h:outputText value="#{usuario.usuDtnasc}"/>    
                                        </p:column>    
                                        <p:column headerText="Ação" width="50">    
                                            <p:commandButton update="@form" value="Selecionar" image="ok" title="Selecionar">    
                                                <f:setPropertyActionListener value="#{usuario}" target="#{reservasJsfBean.crudObj.resleitor}" />    
                                                <f:setPropertyActionListener value="#{usuario.usuCodigo}" target="#{reservasJsfBean.codigoUsuarioBibParaRegistro}" />    
                                                <f:ajax render="codigo_usuario" event="change" listener="#{reservasJsfBean.atualizarCodigoDeUsuario(event)}"/>    
                                            </p:commandButton>    
                                        </p:column>    
                                    </p:dataTable>    
                                </div>    
                                <br/>    
                            </p:panel>    
                        </p:dialog>    
                            
                        <p:growl id="grow2" life="4000"/>    
                        <fieldset>    
                            <legend>Dados principais</legend>    
                            <h:panelGrid columns="2" width="100%">    
                                <h:panelGrid columns="2">    
                                    <div>    
                                        <td align="right">Usuário:</td>    
                                        <h:panelGrid columns="3">    
                                            <p:inputMask id="codigo_usuario" size="6" mask="9?9999" required="true" requiredMessage="O campo usuário deve ser informado." placeHolder="" value="#{reservasJsfBean.codigoUsuarioBibParaRegistro}" >    
                                                <f:ajax render="codigo_usuarioMostra" event="change" listener="#{reservasJsfBean.atualizarUsuarioPorCodigo(event)}"/>    
                                            </p:inputMask>    
                                            <p:inputText id="codigo_usuarioMostra" size="35" disabled="true" required="true" requiredMessage="O campo usuário deve ser informado." value="#{reservasJsfBean.crudObj.resleitor.usuNome}"/>    
                                            <p:commandButton icon="ui-icon-search" onclick="usuarioDialog.show()"/>    
                                        </h:panelGrid><br/>    
                                    </div>    
                                        
                                </h:panelGrid>    
                                <h:panelGrid columns="2" style="height: 100%; border-top: 0">    
    
                                    <p:outputLabel id="resSituacao_lbl" value="Situação:" for="resSituacao" />    
                                    <p:selectOneMenu id="resSituacao" value="#{reservasJsfBean.crudObj.resSituacao}" required="true" requiredMessage="O campo situação deve ser informado.">    
                                        <f:selectItem itemLabel="Ativo" itemValue="A" />    
                                        <f:selectItem itemLabel="Inativo" itemValue="I"/>    
                                    </p:selectOneMenu>    
    
                                    <p:outputLabel id="resDtfinal_lbl" value="Data Validade:" for="resDtfinal"/>    
                                    <p:inputMask id="resDtfinal" mask="99/99/9999" value="#{reservasJsfBean.crudObj.resDtfinal}" style="width: 60%" required="true" requiredMessage="O campo data final deve ser informado.">    
                                        <f:convertDateTime pattern="dd/MM/yyyy"/>    
                                    </p:inputMask>    
                                </h:panelGrid>    
                            </h:panelGrid>    
    
                        </fieldset>    
                        <br/>    
    
                        <h:outputLabel/>    
    
                        <h:panelGrid columns="3">    
                            <treap:btnCrudNovo bean="#{reservasJsfBean}" visivel="#{sec:ifAnyGranted('ADM')}"/>    
                            <treap:btnCrudSalvar bean="#{reservasJsfBean}"/>    
                            <treap:btnCrudCancelar bean="#{reservasJsfBean}"/>    
                        </h:panelGrid>    
                    </p:tab>    
               </p:tabView>    
            </ui:define>    
        </ui:composition>    
    </body>    
</html>

Se alguém puder ajudar, agradeceria mto. Já fiz vários testes e pedi ajuda pra mtas pessoas, porém, ninguém conseguiu me ajudar a solucionar o problema.
Então, se voês puderem ajudar, agradeço mtoo. Vlw

16 Respostas

R

Alguém já passou por isso ou poderia dar alguma ideia por favor?? Vlw…

D

Experimenta colocar immediate=“true” dentro do teu <p:commandButton/> pra ver se funciona.
vlw

Diego_Adriano

<p:commandButton value="Listar" icon="ui-icon-search" ajax="true" immediate="true" oncomplete="janelaLancamento.show()"/>

Immediate = true, “pula” a validação … dos campos obrigatórios …

Ricardo, você é parente do Frank ?

R

diego_pereira:
Experimenta colocar immediate=“true” dentro do teu <p:commandButton/> pra ver se funciona.
vlw

vou testar aki, valeu…

R

Diego Adriano:
<p:commandButton value="Listar" icon="ui-icon-search" ajax="true" immediate="true" oncomplete="janelaLancamento.show()"/>

Immediate = true, “pula” a validação … dos campos obrigatórios …

Ricardo, você é parente do Frank ?


Boa tarde. Bhá cara, sei não… Sou aki do RS … esse Frank é de onde msm?? Vlww pela ajuda ae…

Diego_Adriano

Rsrsrs … a cara … sou aqui de minas … divisa com sampa …rs
Esse Frank me deu aula na facu a irmã dele tb … Flávia Favero … Pensei que fossem parentes e tals pelo sobrenome … hehe … faz tempo que não falo com ele … o cara era um crânio … doutorado em Fisica Quantica e tals … hsuahsu gente fina !! rs

R

Diego Adriano:
Rsrsrs … a cara … sou aqui de minas … divisa com sampa …rs
Esse Frank me deu aula na facu a irmã dele tb … Flávia Favero … Pensei que fossem parentes e tals pelo sobrenome … hehe … faz tempo que não falo com ele … o cara era um crânio … doutorado em Fisica Quantica e tals … hsuahsu gente fina !! rs

sahuasuhsahusauhhuaas
mas que barbaridade… Acho que não sou parente dele não hein…Mas enfim…Cara, se eu colocar immediate=“true” dentro do <p:commandButton do dialog até funciona, mas daí quando o cara selecionar o usuário no DIALOG, ele SOMENTE traz o NOME e não o CÓDIGO…Alguma idéia?? Vlw

R

diego_pereira:
Experimenta colocar immediate=“true” dentro do teu <p:commandButton/> pra ver se funciona.
vlw

Coloquei cara, porém… daí se seleciono o usuário pelo Dialog, ele “traz” o nome blz, só que não traz consigo o código, além de que pra trazer consigo o código estou tendo que colocar como required = “false”… caso contrário ele dá problema no inputMask que deveria vir o código. Poderia continuar ajudando?? Vlw pela força ae…Abc

Diego_Adriano

Cara altere isso:

<p:commandButton update="@form" value="Selecionar" image="ok" title="Selecionar"> <f:setPropertyActionListener value="#{usuario}" target="#{reservasJsfBean.crudObj.resleitor}" /> <f:setPropertyActionListener value="#{usuario.usuCodigo}" target="#{reservasJsfBean.codigoUsuarioBibParaRegistro}" /> <f:ajax render="codigo_usuario" event="change" listener="#{reservasJsfBean.atualizarCodigoDeUsuario(event)}"/> </p:commandButton>
Para isso:

<p:commandButton update="@form" value="Selecionar" image="ok" title="Selecionar"> <f:setPropertyActionListener value="#{usuario}" target="#{reservasJsfBean.resleitorSelecionado}" /> </p:commandButton>
Crie esse cara dentro do seu Bean: "resleitorSelecionado"
No set dele, faça ele chamar um método que busque ele na base !!!

R

Diego Adriano:
Cara altere isso:

<p:commandButton update="@form" value="Selecionar" image="ok" title="Selecionar"> <f:setPropertyActionListener value="#{usuario}" target="#{reservasJsfBean.crudObj.resleitor}" /> <f:setPropertyActionListener value="#{usuario.usuCodigo}" target="#{reservasJsfBean.codigoUsuarioBibParaRegistro}" /> <f:ajax render="codigo_usuario" event="change" listener="#{reservasJsfBean.atualizarCodigoDeUsuario(event)}"/> </p:commandButton>
Para isso:

<p:commandButton update="@form" value="Selecionar" image="ok" title="Selecionar"> <f:setPropertyActionListener value="#{usuario}" target="#{reservasJsfBean.resleitorSelecionado}" /> </p:commandButton>
Crie esse cara dentro do seu Bean: "resleitorSelecionado"
No set dele, faça ele chamar um método que busque ele na base !!!


Vou testar aki e depois posto o resultado cara. Vlw por estar ajudando…Vlw mesmo…

R

Diego Adriano:
Cara altere isso:

<p:commandButton update="@form" value="Selecionar" image="ok" title="Selecionar"> <f:setPropertyActionListener value="#{usuario}" target="#{reservasJsfBean.crudObj.resleitor}" /> <f:setPropertyActionListener value="#{usuario.usuCodigo}" target="#{reservasJsfBean.codigoUsuarioBibParaRegistro}" /> <f:ajax render="codigo_usuario" event="change" listener="#{reservasJsfBean.atualizarCodigoDeUsuario(event)}"/> </p:commandButton>
Para isso:

<p:commandButton update="@form" value="Selecionar" image="ok" title="Selecionar"> <f:setPropertyActionListener value="#{usuario}" target="#{reservasJsfBean.resleitorSelecionado}" /> </p:commandButton>
Crie esse cara dentro do seu Bean: "resleitorSelecionado"
No set dele, faça ele chamar um método que busque ele na base !!!


Estou tentando fazer, mas não to conseguindo… Abaixo o xhtml:

<p:commandButton immediate="true" update="@form" value="Selecionar" image="ok" title="Selecionar">   
                                                <f:setPropertyActionListener value="#{usuario.usuCodigo}" target="#{reservasJsfBean.resleitorSelecionado}" />   
                                                <f:ajax render="codigo_usuario" event="change" listener="#{reservasJsfBean.atualizarCodigoDeUsuario(event)}"/>
                                            </p:commandButton>

No meu bean:

private String resleitorSelecionado;

    public String getResleitorSelecionado() {
        return resleitorSelecionado;
    }

    public void setResleitorSelecionado(String resleitorSelecionado) {
        this.resleitorSelecionado = crudObj.getResleitor().getUsuNome();
    }


public void atualizarCodigoDeUsuario(AjaxBehaviorEvent event) {
        if (crudObj.getResleitor() != null) {
            codigoUsuarioBibParaRegistro = crudObj.getResleitor().getUsuCodigo().toString();
        }
    }

Poderia dar uma mão ae??? Vlw por estar ajudando…

Diego_Adriano

Bão .. como diria Jack, "vms por partes" !!!

1º Não precisa do ajax, chame o método diretamente pelo commandbutton
<p:commandButton immediate="true" update="@form" value="Selecionar" image="ok" title="Selecionar" actionListner="{reservasJsfBean.atualizarCodigoDeUsuario}">     
     <f:setPropertyActionListener value="#{usuario}" target="#{reservasJsfBean.resleitorSelecionado}" />     
</p:commandButton>
2º Esse "resleitorSelecionado" precisa ser o msm objeto que esse "resleitor". Então altere isso:
private String resleitorSelecionado;

3º Esse cara:

public void setResleitorSelecionado(String resleitorSelecionado) {  
       this.resleitorSelecionado = resleitorSelecionado;  
       atualizarCodigoDeUsuario();
   } 

public void atualizarCodigoDeUsuario() {  
       
           codigoUsuarioBibParaRegistro = getResleitorSelecionado();  
         
   }

Acho que agora fica mais claro pra entender !!

R
Diego Adriano:
Bão .. como diria Jack, "vms por partes" !!! 1º Não precisa do ajax, chame o método diretamente pelo commandbutton
<p:commandButton immediate="true" update="@form" value="Selecionar" image="ok" title="Selecionar" actionListner="{reservasJsfBean.atualizarCodigoDeUsuario}">     
     <f:setPropertyActionListener value="#{usuario}" target="#{reservasJsfBean.resleitorSelecionado}" />     
</p:commandButton>
2º Esse "resleitorSelecionado" precisa ser o msm objeto que esse "resleitor". Então altere isso:
private String resleitorSelecionado;

3º Esse cara:

public void setResleitorSelecionado(String resleitorSelecionado) {  
       this.resleitorSelecionado = resleitorSelecionado;  
       atualizarCodigoDeUsuario();
   } 

public void atualizarCodigoDeUsuario() {  
       
           codigoUsuarioBibParaRegistro = getResleitorSelecionado();  
         
   }

Acho que agora fica mais claro pra entender !!


BHá cara, desculpe pela ignorância em não saber essas coisas, mas é ke sou meio novato... mas to me esforçando.. Vou fazer como vc falou e posto o resultado.. Valeu cara, valeu msm :)

R
Diego Adriano:
Bão .. como diria Jack, "vms por partes" !!! 1º Não precisa do ajax, chame o método diretamente pelo commandbutton
<p:commandButton immediate="true" update="@form" value="Selecionar" image="ok" title="Selecionar" actionListner="{reservasJsfBean.atualizarCodigoDeUsuario}">     
     <f:setPropertyActionListener value="#{usuario}" target="#{reservasJsfBean.resleitorSelecionado}" />     
</p:commandButton>
2º Esse "resleitorSelecionado" precisa ser o msm objeto que esse "resleitor". Então altere isso:
private String resleitorSelecionado;

3º Esse cara:

public void setResleitorSelecionado(String resleitorSelecionado) {  
       this.resleitorSelecionado = resleitorSelecionado;  
       atualizarCodigoDeUsuario();
   } 

public void atualizarCodigoDeUsuario() {  
       
           codigoUsuarioBibParaRegistro = getResleitorSelecionado();  
         
   }
Acho que agora fica mais claro pra entender !!
Bem, ainda to "apanhando" no negócio aki...No meu bean. fiz o seguinte:
private Usuariobib resleitorSelecionado;

    public Usuariobib getResleitorSelecionado() {
        return resleitorSelecionado;
    }

    public void setResleitorSelecionado(Usuariobib resleitorSelecionado) {
        this.resleitorSelecionado = resleitorSelecionado;
    atualizarCodigoDeUsuario();
    }

    public void atualizarCodigoDeUsuario() {
        codigoUsuarioBibParaRegistro = getResleitorSelecionado().getUsuCodigo().toString();
    }
e no meu xhtml: (botão que seleciona o usuario dentro do dialog)
<p:commandButton immediate="true" update="@form" value="Selecionar" image="ok" title="Selecionar" actionListner="#{reservasJsfBean.atualizarCodigoDeUsuario}">       
                                                <f:setPropertyActionListener  value="#{usuario}" target="#{reservasJsfBean.resleitorSelecionado}" />       
                                            </p:commandButton>
Se o cara souber o código dele está salvando no banco blz, porém se ir selecionar pelo dialog, não tá nem aparecendo o nome do usuario nos input da tela e nem gravando no banco =/ .. Pode continuar ajudando cara??? Vlw....
Diego_Adriano

Aqui ó : codigoUsuarioBibParaRegistro = getResleitorSelecionado().getUsuCodigo().toString();

Deixe ele igual ao método que busca pelo codigo do usuário …

R

Diego Adriano:
Aqui ó : codigoUsuarioBibParaRegistro = getResleitorSelecionado().getUsuCodigo().toString();

Deixe ele igual ao método que busca pelo codigo do usuário …


Blz, vou testar aki e posto o resultado…Vlw…

Criado 22 de abril de 2013
Ultima resposta 22 de abr. de 2013
Respostas 16
Participantes 3