Bom dia!
Tenho o seguinte problema: há um combo para a seleção do país de origem de uma pessoa. Caso o país de origem seja o Brasil (default), há um combo com os estados para que se selecione a naturalidade. Caso não seja o Brasil, este combo deve desaparecer e, em seu lugar, aparecer um campo para o ano de chegada da pessoa ao Brasil e a sua naturalidade (como input).
As tecnologias utilizadas são JSF/Facelets. Implementei isto com ajax4jsf do seguinte modo:
[code]
País de Origem
<h:selectOneMenu id=“paisOrigem” immediate=“true”
value="#{pessoa.pessoa.paisOrigem}" binding="#{pessoa.paisOrigemSelect}">
<f:selectItems value="#{pato.paisItens}" id=“paisOrigemItens”/>
<a4j:support event=“onchange” reRender=“naturalidadeBrasileiro,infosEstrangeiro”
action="#{pessoa.paisOrigemOnChange}"/>
</h:selectOneMenu>
<h:panelGroup rendered="#{not pessoa.pessoa.estrangeiro}" id=“naturalidadeBrasileiro”
layout=“block”>
Naturalidade
</h:panelGroup>
<h:panelGroup rendered="#{pessoa.pessoa.estrangeiro}" id=“infosEstrangeiro”
layout=“block”>
Ano Chegada
<p>
<label jsfc="h:outputLabel" for="naturalidadeEstrangeiro">Naturalidade</label>
<input jsfc="h:inputText" type="text" id="naturalidadeEstrangeiro"
maxlength="80" size="40" value="#{pessoa.pessoa.naturalidadeEstrangeiro}" />
</p>
</h:panelGroup>[/code]
O método paisOrigemOnChange() roda a contento no sevidor e altera o resultado do metodo isEstrangeiro(), consultado nos atributos rendered dos dois <h:panelGroup>.
Minha dúvida é: tem algo de errado no que eu fiz? Deixei de fazer algo? Não consegui achar nenhum exemplo disto na web e, lendo a documentação oficial, achei que fosse funcionar.
tenta colocar um panelGroup (ou outro componente) como pai dos panels que você está tentando carregar via ajax e reRerenderizar esse panelGroup
nao funciona colocando direto nos panels pq eles não sendo renderizados não vão estar acessíveis no código html da tela
Funcionou perfeitamente, muito obrigado!!
Rodrigo
Estou tendo o mesmo problema em uma aplicacao aqui.
Você poderia postar o código com a alteracão que você fez para funcionar?
Desde já agradeco.
Aí vai
[code]
País de Origem
<h:selectOneMenu id=“paisOrigem” immediate=“true”
value="#{pessoa.pessoa.paisOrigem}" binding="#{pessoa.paisOrigemSelect}">
<f:selectItems value="#{pato.paisItens}" id=“paisOrigemItens”/>
<a4j:support event=“onchange” reRender=“infosNacionalidade”
action="#{pessoa.paisOrigemOnChange}" id=“ajaxPaisOrigem”/>
</h:selectOneMenu>
<h:panelGroup id=“infosNacionalidade”>
<h:panelGroup rendered="#{not pessoa.pessoa.estrangeiro}" id="naturalidadeBrasileiro"
layout="block">
<p>
<label jsfc="h:outputLabel" for="naturalidade">Naturalidade</label>
<select jsfc="h:selectOneMenu" id="naturalidade" value="#{pessoa.pessoa.naturalidade}">
<option jsfc="f:selectItems" value="#{pato.estadosItem}" />
</select>
</p>
</h:panelGroup>
<h:panelGroup rendered="#{pessoa.pessoa.estrangeiro}" id="infosEstrangeiro"
layout="block">
<p>
<label jsfc="h:outputLabel" for="anoChegada">Ano Chegada</label>
<input jsfc="h:inputText" type="text" id="anoChegada" maxlength="4" size="4"
value="#{pessoa.pessoa.anoChegada}" />
</p>
<p>
<label jsfc="h:outputLabel" for="naturalidadeEstrangeiro">Naturalidade</label>
<input jsfc="h:inputText" type="text" id="naturalidadeEstrangeiro"
maxlength="80" size="40" value="#{pessoa.pessoa.naturalidadeEstrangeiro}" />
</p>
</h:panelGroup>
</h:panelGroup>[/code]
No managed bean:
[code]private UISelectOne paisOrigemSelect;
public String paisOrigemOnChange()
{
Pais paisOrigem = (Pais) paisOrigemSelect.getValue();
this.pessoa.setPaisOrigem(paisOrigem);
return null;
}[/code]
Olá caros amigos, sou novo com jsf, e estou querendo simplesmente renderizar componentes.
Segue o código, se alguem poder me ajudar!
quero apena mostrar o pessoa fisica e juridica.
[code] <rich:panel>
<h:panelGrid id=“teste” columns=“1”>
<ui:define name=“label”>Tipo Pessoa</ui:define>
<h:selectOneRadio value="#{richFacesBean.formaPagamento}">
<f:selectItem itemValue=“1” itemLabel=“Pessoa Fisica” />
<f:selectItem itemValue=“2” itemLabel=“Pessoa Juridica” />
<a4j:support ajaxSingle=“true” event=“onclick” reRender=“painel1,painel2”/>
</h:selectOneRadio>
</h:panelGrid>
<h:panelGrid id="painel1" rendered="#{richFacesBean.formaPagamento eq 1}">
Pessoa Fisica
</h:panelGrid>
<h:panelGrid id="painel2" rendered="#{richFacesBean.formaPagamento eq 2}">
Pessoa Juridica
</h:panelGrid>
</rich:panel>[/code]
Bom dia pessoal,
Sou iniciante no JSF e estou desenvolvendo um protótipo onde preciso renderizar dois painéis dentro de uma única janela modal., O primeiro painel contém o form de consulta de CPF e o segundo traz o retorno desta consulta. Adequei o meu código a solução aqui postada sobre ter um “painel pai” e reRenderizá-lo, e ter uma variável booleana no manageBean para tratar a visibilidade dos painéis. A idéia é: quando clicar no botão de consulta o painel de consulta deveria ser omitido e o de retorno de dados exibido. Só que quando clico no botão de consulta do primeiro painel, nada acontece. Pelo console verifico que o método booleano isVisivel() está sendo chamado quando chamo a página. Mas após isso, ao acionar o botão de consulta, observo que nada aparece no console. Alguém pode me ajudar ??? Segue abaixo o código da página e o do manageBean. Lembro que trata-se apenas de protótipo.
Desde já agradeço a ajuda dos feras.
Abçs.
Mônica.
Página consultar_cpf.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:serpro="http://www.demoiselle.gov.br">
<rich:modalPanel id="panelConsultaCPF" styleClass="modalForms modalFormsAbas" width="1000" height="400">
<f:facet name="header">
<h:panelGroup>
<h:outputText value="Consultar CPF"></h:outputText>
</h:panelGroup>
</f:facet>
<f:facet name="controls">
<a4j:commandButton styleClass="closeModal" onclick="Richfaces.hideModalPanel('panelConsultaCPF')" />
</f:facet>
<!-- PAINEL CONTAINER -->
<f:view>
<a4j:form>
<a4j:outputPanel id="container">
<!-- PAINEL ENTRADA CPF -->
<a4j:outputPanel id="visivel" rendered="#{cpfMB.visivel}" layout = "block">
<fieldset class="line">
<legend class="legend">Informe CPF</legend>
<div class="line lineForm">
<div class="unit size1of1 unitGroup noBorder">
<div class="unit unitData">
<h:inputText value="#{cpfMB.numero}" styleClass="medium" />
</div>
</div>
<span class="line containerButtons">
<a4j:commandButton actionListener="#{cpfMB.consultarCPF}" value="Consultar"
styleClass="button" reRender="container"/>
</span>
</div>
</fieldset>
</a4j:outputPanel>
<!-- FIM PAINEL ENTRADA CPF -->
<!-- PAINEL RETORNO DADOS CPF -->
<a4j:outputPanel id="invisivel" rendered="#{!cpfMB.visivel}" layout = "block">
<div class="line containerButtons">
<a4j:commandButton actionListener="#{cpfMB.consultarCPF}" value="Nova Consulta"
styleClass="buttonPage" reRender="container"/>
<a4j:commandButton styleClass="buttonPage" action="#" value="Fechar [X]"
onclick="javascript:self.close()"/>
</div>
</a4j:outputPanel>
<!-- FIM PAINEL RETORNO DADOS CPF -->
</a4j:outputPanel>
</a4j:form>
</f:view>
<!-- FIM PAINEL CONTAINER -->
</rich:modalPanel>
</html>
Código do ManageBean
import javax.faces.event.ActionEvent;
public class CPFMB {
...
private boolean visivel = true;
public void consultarCPF(ActionEvent e){
this.setVisivel(false);
}
...
public void setVisivel(boolean visivel) {
System.out.println("setVisivel");
this.visivel = visivel;
}
public boolean isVisivel() {
System.out.println("isVisivel");
return visivel;
}
}