Fazer aparecer um outputlabel e um inputtext

5 respostas
T

Boa tarde pessoal,
estou com um problema que está me tirando o sono.

<h:outputLabel value="UF:" />
                                <p:selectOneMenu  id="som-ufs"  value="#{pessoasFisicasManagedBean.UF}">
                                    <f:selectItem itemLabel="Selecione o estado" itemValue="Nenhum" />
                                    <f:selectItem itemLabel="Nenhum" itemValue="Outro" />
                                    <f:selectItems value="#{pessoasFisicasManagedBean.UFs}" />                        
                                    <p:ajax event="change"  update="som-cidades,test-inp"  listener="#{pessoasFisicasManagedBean.getchangeUF}"/>
                                </p:selectOneMenu> 

                                <h:outputLabel value="Cidade:" />
                                <p:selectOneMenu id="som-cidades" value="#{pessoasFisicasManagedBean.city}">
                                    <f:selectItem itemLabel="Selecione a cidade" itemValue="Nenhum" />                                    
                                    <f:selectItems value="#{pessoasFisicasManagedBean.cidades}" />
                                </p:selectOneMenu> 
                               
                                <p:outputLabel  for="test-inp" rendered="#{pessoasFisicasManagedBean.mostraEsconde}" value="created" />
                                <p:inputText id="test-inp" rendered="#{pessoasFisicasManagedBean.mostraEsconde}" label="created"/>

Quando eu selecionar em som-ufs o item outro, o componente test-inp deve aparecer na tela. Quando eu selecionar qualquer outro valor ele deve sumir. Não consigo renderizar ele na tela, ou fazê-lo desaparecer. Estes componentes estão dentro de um p:dialog, assim não posso colocar assim:
<p:selectOneMenu id=“som-ufs” value="#{pessoasFisicasManagedBean.UF}" onChange=“this.form:submit()”> Alguém tem alguma idéia?
A propriedade mostraesconde está funcionando corretamente. Tenho certeza que o problema está na renderização ou atualização da tela.

5 Respostas

H

Porque você não utiliza Ajax?

JSF Exemplos Simples com Ajax

T

Olhei os exemplos, mas não funcionou, ou, eu não estou sabendo usar.

Tentei assim:

<h:outputLabel value="UF:" />
                                <p:selectOneMenu  id="som-ufs"  value="#{pessoasFisicasManagedBean.UF}">
                                    <f:selectItem itemLabel="Selecione o estado" itemValue="Nenhum" />
                                    <f:selectItem itemLabel="Nenhum" itemValue="Outro" />
                                    <f:selectItems value="#{pessoasFisicasManagedBean.UFs}" />                        
                                    <p:ajax event="change"  update="som-cidades"  listener="#{pessoasFisicasManagedBean.getchangeUF}"/>
                                    <f:ajax render="test-inp" execute="test-inp"/>
                                </p:selectOneMenu> 

                                <h:outputLabel value="Cidade:" />
                                <p:selectOneMenu id="som-cidades" value="#{pessoasFisicasManagedBean.city}">
                                    <f:selectItem itemLabel="Selecione a cidade" itemValue="Nenhum" />                                    
                                    <f:selectItems value="#{pessoasFisicasManagedBean.cidades}" />
                                </p:selectOneMenu> 
                               
                                <p:outputLabel  for="test-inp" rendered="#{pessoasFisicasManagedBean.mostraEsconde}" value="created" />
                                <p:inputText id="test-inp" rendered="#{pessoasFisicasManagedBean.mostraEsconde}" label="created"/>

                                <h:outputText value="Natural da Cidade: *" />
                                <p:inputText required="true" label="Natural da Cidade"
                                             value="#{pessoasFisicasManagedBean.selectedPf.cidadeNasc}" />

Tem como me dar uma dica?

T

Resolvido:
Bastava eu atualizar o form que está dentro do p:dialog.
Para futuras consultas segue como ficou:

<h:outputLabel value="UF:" />
                                <p:selectOneMenu  id="som-ufs"  value="#{pessoasFisicasManagedBean.UF}">
                                    <f:selectItem itemLabel="Selecione o estado" itemValue="Nenhum" />
                                    <f:selectItem itemLabel="Nenhum" itemValue="Outro" />
                                    <f:selectItems value="#{pessoasFisicasManagedBean.UFs}" />                        
                                    <p:ajax event="change"  update="som-cidades,formcad"  listener="#{pessoasFisicasManagedBean.getchangeUF}"/>                                   
                                </p:selectOneMenu> 

                                <h:outputLabel value="Cidade:" />
                                <p:selectOneMenu id="som-cidades" value="#{pessoasFisicasManagedBean.city}">
                                    <f:selectItem itemLabel="Selecione a cidade" itemValue="Nenhum" />                                    
                                    <f:selectItems value="#{pessoasFisicasManagedBean.cidades}" />
                                </p:selectOneMenu> 
                               
                                <p:outputLabel  for="test-inp" rendered="#{pessoasFisicasManagedBean.mostraEsconde}" value="created" />
                                <p:inputText id="test-inp" rendered="#{pessoasFisicasManagedBean.mostraEsconde}" label="created"/>

Adicionei formcad que é o formulário contido dentro de p:dialog e que contém os componentes acima. Funcionou legal.

T

Achei que tinha resolvido, porém estou com um outro problema. Quando o código abaixo roda eu perco os dados digitados anteriormente devido ao refresh do form. Ainda não consegui resolver. Veja abaixo como está!!!

<h:outputLabel value="Natural do Estado:" />
                                <p:selectOneMenu  id="som-ufs"  value="#{pessoasFisicasManagedBean.UF}">                                  
                                    <f:selectItem itemLabel="Selecione o estado" itemValue="Nenhum" />
                                    <f:selectItem itemLabel="Outro" itemValue="Outro" />
                                    <f:selectItems value="#{pessoasFisicasManagedBean.UFs}" />                        
                                    <p:ajax event="change"  update="som-cidades,test-inp" listener="#{pessoasFisicasManagedBean.getchangeUF}"/>                                                                       
                                </p:selectOneMenu> 

                                <h:outputLabel value="Natural da Cidade:" />
                                <p:selectOneMenu id="som-cidades" value="#{pessoasFisicasManagedBean.city}">
                                    <f:selectItem itemLabel="Selecione a cidade" itemValue="Nenhum" />                                    
                                    <f:selectItems value="#{pessoasFisicasManagedBean.cidades}" />                                    
                                </p:selectOneMenu> 
                                
                                <h:outputLabel  for="test-inp" rendered="#{pessoasFisicasManagedBean.mostraEsconde}" value="created" />
                                <p:inputText id="test-inp" rendered="#{pessoasFisicasManagedBean.mostraEsconde}" label="created"/>

Se invés de colocar test-inp aqui:

<p:ajax event="change"  update="som-cidades,test-inp" listener="#{pessoasFisicasManagedBean.getchangeUF}"/>

Eu colocar assim:

<p:ajax event="change"  update="som-cidades,formcad" listener="#{pessoasFisicasManagedBean.getchangeUF}"/>

Onde formcad é o nome do formulário que o contém ele funciona mas perco os valores previamente digitados.

Alguém por favor me dá uma luz.

Obrigado desde já.

T

Depois de muita briga, descobri que o

<p:ajax event="change" update="som-cidades,gridstate" listener="#{pessoasFisicasManagedBean.getchangeUF}"/>

só atualiza sem perder os dados anteriores se eu envolvesse o mesmo com um panelGrid.

Ficou assim:

<h:panelGrid title="Digite os novos dados" id="gridstate" columns="2" columnClasses="label, value" style=" resize: horizontal">      
                                    <h:outputLabel for="state" rendered="#{pessoasFisicasManagedBean.mostraEsconde}" value="Natural do Estado:" />
                                    <p:inputText label="Estado:" id="state" rendered="#{pessoasFisicasManagedBean.mostraEsconde}" />  
                                    <h:outputLabel for="sigla" rendered="#{pessoasFisicasManagedBean.mostraEsconde}" value="Sigla: " />
                                    <p:inputText  label="Sigla:" id="sigla" rendered="#{pessoasFisicasManagedBean.mostraEsconde}" />    
                                    <h:outputLabel for="city" rendered="#{pessoasFisicasManagedBean.mostraEsconde}" value="Cidade Natal: " />
                                    <p:inputText label="Cidade:" id="city" rendered="#{pessoasFisicasManagedBean.mostraEsconde}" />    
                                </h:panelGrid>

Agora sim, ele mostra e esconde todos os componentes, pois dá um update no panelGrid.
Gostaria de pedir a todos aqueles que pedem ajuda e que conseguiram resolver o problema por conta própria que deixem a solução para consultas posteriores.

Obrigado a todos.

Criado 25 de junho de 2012
Ultima resposta 27 de jun. de 2012
Respostas 5
Participantes 2