Olá, estou apanhando um bocado tentanto exibir / ocultar um painel em jsf. Se alguém puder me ajudar agradeco.
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.
<%@ 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” />
</a4j:outputPanel>[/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).
Eae pessoal, alguma dica?