dúvida - como exibir/ocultar um painel em jsf

Olá, estou apanhando um bocado tentanto exibir / ocultar um painel em jsf. Se alguém puder me ajudar agradeco. :wink:

Não seria só trabalhar com o atributo rendered do painel?

Qualquer coisa posta a sua jsp…

Valeu!

olá,

utilize o atributo rendered do painel…

tipo

Exibi:
<h:panelGrid rendered="true" />

oculta:
<h:panelGrid rendered="false" />

vc pode tambem utilizar uma variavel boolean atraves do seu managedBean

tipo: <h:panelGrid rendered="#{meuBean.exibir}" />

MeuBean

[code]
public class MeuBean{

private boolean exibir;

//getter and setter

}[/code]

em algum momento da sua aplicação vc podera alterar o valor da variavel exibir com isso seu painel podera “aparecer”(exibir=true) ou ficar oculto(exibir=false)…

acho q e isso…

espero ter ajudado.

abaixo segue o código do meu jsp, gostaria de saber o que estou fazendo de errado. Quem puder me ajudar agradeco. :wink:

<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <%@ taglib uri="http://richfaces.org/rich" prefix="rich" %> <%@ taglib uri="http://richfaces.org/a4j" prefix="a4j" %> <%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t" %> <jsp:include page="/include/cabecalho.jsp"/> <f:view> <jsp:include page="/include/menu.jsp"></jsp:include> <h:form> <h:panelGrid columns="2" border="0"> <h:panelGroup> <h:outputLabel id="lblEmpresa" value="Empresa:" for="sltEmpresa"/> </h:panelGroup> <h:panelGroup> <h:selectOneMenu id="sltEmpresa" value="#{cadastroUsuarioBean.idempresa}"> <f:selectItems value="#{cadastroUsuarioBean.listacomboempresa}"/> </h:selectOneMenu> </h:panelGroup> <h:panelGroup> <h:outputLabel id="lblSetor" value="Setor:" for="sltSetor"/> </h:panelGroup> <h:panelGroup> <h:selectOneMenu id="sltSetor" value="#{cadastroUsuarioBean.idsetor}"> <f:selectItems value="#{cadastroUsuarioBean.listacombosetor}"/> </h:selectOneMenu> </h:panelGroup> <h:panelGroup> <h:outputLabel id="lblMatricula" value="Matrícula:" for="txtMatricula"/> </h:panelGroup> <h:panelGroup> <h:inputText id="txtMatricula" value="#{cadastroUsuarioBean.matricula}"></h:inputText> </h:panelGroup> <h:panelGroup> <h:outputLabel id="lblNome" value="Nome:" for="txtNome"/> </h:panelGroup> <h:panelGroup> <h:inputText id="txtNome" value="#{cadastroUsuarioBean.nome}"></h:inputText> </h:panelGroup> <h:panelGroup> <h:outputLabel id="lblEmail" value="Email:" for="txtEmail"/> </h:panelGroup> <h:panelGroup> <h:inputText id="txtEmail" value="#{cadastroUsuarioBean.email}"></h:inputText> </h:panelGroup> <h:panelGroup> <h:outputLabel id="lblAcessoSistema" value="Acessar Sistema?" /> </h:panelGroup> <h:panelGroup> <h:selectBooleanCheckbox id="ativo" value="#{cadastroUsuarioBean.ativo}"> <a4j:support reRender="cadUsuario" event="onclick" action="#{cadastroUsuarioBean.exibirPainel}"></a4j:support> </h:selectBooleanCheckbox> </h:panelGroup> </h:panelGrid> <h:panelGrid width="240px" style="text-align:center;"> <h:panelGroup> <f:verbatim><p></p></f:verbatim> <f:verbatim><br/></f:verbatim> </h:panelGroup> </h:panelGrid> <h:panelGrid id="cadUsuario" rendered="#{cadastroUsuarioBean.exibir}"> <h:panelGroup> <h:outputLabel id="lblLogin" value="Login:" for="txtLogin"/> </h:panelGroup> <h:panelGroup> <h:inputText id="txtLogin" value="#{cadastroUsuarioBean.login}"/> </h:panelGroup> <h:panelGroup> <h:outputLabel id="lblSenha" value="Senha:"/> </h:panelGroup> <h:panelGroup> <h:inputSecret id="txtSenha" value="#{cadastroUsuarioBean.senha}"/> </h:panelGroup> </h:panelGrid> <h:panelGrid> <h:panelGroup> <h:commandButton id="cmdCadastarFuncionario" value="Cadastrar Funcionário" action="#{cadastaroUsuarioBean.cadastrarUsuario}"/> </h:panelGroup> </h:panelGrid> <rich:messages id="listaDeMensagens" style="margin: 20px 0 20px 0;" layout="list" errorLabelClass="erro" infoLabelClass="sucesso" showSummary="false" showDetail="true"> <f:facet name="infoMarker"> <h:graphicImage value="http://#{facesContext.externalContext.request.serverName}:#{facesContext.externalContext.request.serverPort}/iAcervo/imagens/confirmar.gif" /> </f:facet> <f:facet name="errorMarker"> <h:graphicImage value="http://#{facesContext.externalContext.request.serverName}:#{facesContext.externalContext.request.serverPort}/iAcervo/imagens/cancelar.gif" /> </f:facet> </rich:messages> </h:form> </f:view>

Olá, poste o metodo exibirPainel, no ManagedBean.

olá,

vamos tentar novamente…

vc utilizou o atributo rendered? parece q não!

bom pelo q eu vi vc tem 2 <h:panelGrid>

qual vc deseja ocultar?

enfim…

faça o seguinte…

<h:panelGrid columns="2" border="0" rendered="false">  
    
     <h:outputText value="Isto [b]não[/b] ira aparecer pois o atributo rendered do panel esta como false" />     

</h:panelGrid>  
<h:panelGrid columns="2" border="0" rendered="true">  
    
     <h:outputText value="Isto ira aparecer pois o atributo rendered do panel esta como true" />     

</h:panelGrid>  
<h:panelGrid rendered="#{meuBean.exibir}">  
    
      <h:outputText value="aqui estou utilizando uma variavel boolena no meu managedBean" /> 
     <h:outputText value="apenas set a variavel exibir como true ou false e pronto!!!" />    
     <h:outputText value="vc ira ocultar ou exibir seu panelGrid... entendeu?" /> 

</h:panelGrid>  

blz t+

a saquei oq vc quer fazer…

vc quer clicar no checkbox e aparecer o panelgrid… e isso?

pow vc tem q falar neh… rss

em seu metodo exibirPainel do seu cadastroUsuarioBean

faça assim…

[code]
public String exibirPainel(){

exibir = true;

// aqui faça o resto da sua logica...

}[/code]

ou melhor ainda…

[code]
public String exibirPainel(){

exibir = ativo;

// aqui faça o resto da sua logica...

}[/code]

ou ainda melhor… essa e fera… porem não testei… ushasuhasuha

 <h:panelGroup>  
       <h:selectBooleanCheckbox id="ativo" value="#{cadastroUsuarioBean.ativo}">  
             <a4j:support reRender="cadUsuario" event="onclick"  />                   
       </h:selectBooleanCheckbox>  
</h:panelGroup>

<!-- Continua -->

 <h:panelGrid id="cadUsuario" rendered="#{cadastroUsuarioBean.ativo}">  
             <h:panelGroup>  
                 <h:outputLabel id="lblLogin" value="Login:" for="txtLogin"/>  
             </h:panelGroup>  
             <h:panelGroup>  
                 <h:inputText id="txtLogin" value="#{cadastroUsuarioBean.login}"/>  
             </h:panelGroup>  
             <h:panelGroup>  
                 <h:outputLabel id="lblSenha" value="Senha:"/>  
             </h:panelGroup>  
             <h:panelGroup>  
                 <h:inputSecret id="txtSenha" value="#{cadastroUsuarioBean.senha}"/>  
             </h:panelGroup>  
</h:panelGrid>  

repare q vc esta utilizando um checkbox q e um boolean correto?
então e so colocar ele como parametro para o rendered… q tal?

espero q minha solução funcione… rsss

t+

[quote=Jeferson_Manetti]a saquei oq vc quer fazer…

vc quer clicar no checkbox e aparecer o panelgrid… e isso?

pow vc tem q falar neh… rss

em seu metodo exibirPainel do seu cadastroUsuarioBean

faça assim…

[code]
public String exibirPainel(){

exibir = true;

// aqui faça o resto da sua logica...

}[/code]

ou melhor ainda…

[code]
public String exibirPainel(){

exibir = ativo;

// aqui faça o resto da sua logica...

}[/code]

ou ainda melhor… essa e fera… porem não testei… ushasuhasuha

 <h:panelGroup>  
       <h:selectBooleanCheckbox id="ativo" value="#{cadastroUsuarioBean.ativo}">  
             <a4j:support reRender="cadUsuario" event="onclick"  />                   
       </h:selectBooleanCheckbox>  
</h:panelGroup>

<!-- Continua -->

 <h:panelGrid id="cadUsuario" rendered="#{cadastroUsuarioBean.ativo}">  
             <h:panelGroup>  
                 <h:outputLabel id="lblLogin" value="Login:" for="txtLogin"/>  
             </h:panelGroup>  
             <h:panelGroup>  
                 <h:inputText id="txtLogin" value="#{cadastroUsuarioBean.login}"/>  
             </h:panelGroup>  
             <h:panelGroup>  
                 <h:outputLabel id="lblSenha" value="Senha:"/>  
             </h:panelGroup>  
             <h:panelGroup>  
                 <h:inputSecret id="txtSenha" value="#{cadastroUsuarioBean.senha}"/>  
             </h:panelGroup>  
</h:panelGrid>  

repare q vc esta utilizando um checkbox q e um boolean correto?
então e so colocar ele como parametro para o rendered… q tal?

espero q minha solução funcione… rsss

t+
[/quote]

Amigo, pode explicar melhor o método exibirPainel??

[code]
public String exibirPainel(){

exibir = ativo; //se puder detalhar mais, agradeço.

// aqui faça o resto da sua logica...

}[/code]

esse método não deveria ser assim?

[code] public void exibirPainel(boolean exibir) {

	exibir = true;

}[/code]

Agradeço.

eae?

[quote]
Amigo, pode explicar melhor o método exibirPainel??

[code]
public String exibirPainel(){

exibir = ativo; //se puder detalhar mais, agradeço.

// aqui faça o resto da sua logica...

}[/code]

esse método não deveria ser assim?

[code] public void exibirPainel(boolean exibir) {

	exibir = true;

}[/code]

Agradeço.[/quote]

Bem vamos lah… da uma olhada no codigo q ele postou…

 <h:panelGroup>  
      <h:selectBooleanCheckbox id="ativo" value="#{cadastroUsuarioBean.ativo}">  
             <a4j:support reRender="cadUsuario" event="onclick" action="#{cadastroUsuarioBean.exibirPainel}"></a4j:support>  
                 </h:selectBooleanCheckbox>  
  </h:panelGroup>  

no seu CadastroUsuarioBean existe uma variavel ativo do tipo boolean onde ele vai setar o valor do h:selectBooleanCheckbox, certo?
o componente a4j:support esta sendo utilizando para q ele faça uma req. ajax ao servidor…
renderizando o cadUsuario com o evento onclick onde sera executado o metodo exibirPainel do cadastroUsuarioBean…
para ser utilizado no action do a4j:support o metodo precisa ter a seguinte assinatura:

public String <nomeMetodo>(){
    return "<String>";
}

dentro desse metodo vc pode fazer qualquer logica… inclusive setar a variavel ativo como true
isso e utilizado qnd vc precisa realizar alguma logica… no nosso caso queriamos apenas atribuir o valor true…
isso e desnecessario, pois o componente h:selectBooleanCheckbox ja esta atribuindo a variavel ativo… tanto para [b]true/b como para false(não selecionado)… portanto poderiamos omitir o action…

repare q o panelGrid abaixo possui o id=“cadUsuario” q sera o componente atualizado qnd o a4j:support for acioando…
repare q em seu atributo rendered="#{cadastroUsuarioBean.ativo}" ele esta utilizando a variavel booleana ativo,
com isso ele ira renderizar de acordo com o conteudo da variavel ativo: true >>> exibir, false >>> ocultar
lembrando q seu sera atualizado de acordo com oq a pessoa escolher no componente h:selectBooleanCheckbox

  <h:panelGrid id="cadUsuario" rendered="#{cadastroUsuarioBean.ativo}">    
              <h:panelGroup>    
                  <h:outputLabel id="lblLogin" value="Login:" for="txtLogin"/>    
              </h:panelGroup>    
              <!-- ... continua... =) -->
 </h:panelGrid>   

enquanto a:

exibir = ativo; //se puder detalhar mais, agradeço.
isto e pura redundancia…
a variavel ativo esta sendo setado como true ou false… e estou colocando em uma variavel exibir q poderia ser utilizado no rendered do panelGrid cadUsuario… na verdade esse codigo e desnecessario como ja expliquei acima…

bem espero ter ajudado… at,

Jeferson

Vou testar em casa, e te falo mais tarde.

Valeu.

Olá senhores,

O problema parece ser o mesmo dessa thread,
http://guj.com.br/posts/list/148603.java

Abraços e boa sorte.

Pessoal, tentei fazer, mas ele atualiza a pagina e não me mostra o outputPanel.

[code]<h:outputText value=“Pago? “/>
<h:selectBooleanCheckbox id=“pagoExibir” value=”#{contasBean.conta.pago}”>
<a4j:support reRender=“datapagamento” event=“onclick” action="#{contasBean.exibirPainel}"/>
</h:selectBooleanCheckbox>


<a4j:outputPanel id=“datapagamento” rendered=“false”>
<h:outputText value=“Data de Pagamento: " />
<rich:calendar value=”#{contasBean.conta.data_pagamento}"
datePattern=“dd/MM/yyyy” />

	&lt;/a4j:outputPanel&gt;[/code]

o método no bean:

[code]private boolean exibir = true;
public boolean exibirPainel() {

	return exibir;
}[/code]

Será que está faltando alguma coisa??

Valeu!!

Você está com rendered=“false”, e o correto é rendered=“true” ou simplesmente omitir o atributo rendered.

rponte, o problema é q se eu setar ele como true ou omitir, ele não funciona (ele fica visível logo de cara).

:frowning:

Eae pessoal, alguma dica?