Primefaces rendered dinâmico com ajax

8 respostas
L

Boa tarde a todos! Estou com problemas ao utilizar um checkbox onde quando estiver false não renderizar mais quando ele estiver marcado,
um ajax no change atualiza o componente

Minha view
<h:outputLabel rendered="#{!reservaHorarioController.hiddenRepetir}" value="Atualizar todos horarios da mesma solicitação:" />
                            <h:selectBooleanCheckbox rendered="#{!reservaHorarioController.hiddenRepetir}" id="updateAll" value="#{reservaHorarioController.updateAll}" />
                            <br />
                            <h:outputLabel rendered="#{reservaHorarioController.hiddenRepetir}" for="repetir" value="Repetir:" />
                            <p:selectBooleanCheckbox rendered="#{reservaHorarioController.hiddenRepetir}" id="repetir" value="#{reservaHorarioController.repetir}" >
                                <p:ajax event="change"  update="pgPanel" listener="#{reservaHorarioController.showRepetir}"/>
                            </p:selectBooleanCheckbox>
                            <p:panelGrid id="pgPanel" rendered="#{reservaHorarioController.hiddenRepetir}">
                                <h:outputLabel rendered="#{!reservaHorarioController.hiddenRepetir}" value="Quantidade de dias?" />
                                <p:spinner rendered="#{!reservaHorarioController.hiddenRepetir}" min="#{reservaHorarioController.timeMin}" max="#{reservaHorarioController.timeMax}" id="spinnerBasic" value="#{reservaHorarioController.qtdDias}"/> 
                                
                            </p:panelGrid>
public Boolean getUpdateAll() {
        if (updateAll == null) {
            updateAll = Boolean.FALSE;
        }
        return updateAll;
    }

    public void setUpdateAll(Boolean updateAll) {
        this.updateAll = updateAll;
    }

    public void showRepetir(){
        setHiddenRepetir(repetir);
    }
    
    public Boolean getHiddenRepetir() {
        if (hiddenRepetir == null) {
            hiddenRepetir = Boolean.FALSE;
        }
        return hiddenRepetir;
    }

8 Respostas

A

Em um dado momento o componente pgPanel pode não está renderizado, então o ideal é q você crie um panel (panelGroup é muito bom nesses casos) acima dele, e dê update nele.
Exemplo:

<h:outputLabel rendered="#{!reservaHorarioController.hiddenRepetir}" value="Atualizar todos horarios da mesma solicitação:" />  
<h:selectBooleanCheckbox rendered="#{!reservaHorarioController.hiddenRepetir}" id="updateAll" value="#{reservaHorarioController.updateAll}" />  
<br />  
<h:outputLabel rendered="#{reservaHorarioController.hiddenRepetir}" for="repetir" value="Repetir:" />  

<p:selectBooleanCheckbox rendered="#{reservaHorarioController.hiddenRepetir}" id="repetir" value="#{reservaHorarioController.repetir}" >  
    <p:ajax event="change"  update="pgPanel" listener="#{reservaHorarioController.showRepetir}"/>  
</p:selectBooleanCheckbox>  

<h:panelGroup id="pgPanel" >
   <p:panelGrid rendered="#{reservaHorarioController.hiddenRepetir}">  
      <h:outputLabel rendered="#{!reservaHorarioController.hiddenRepetir}" value="Quantidade de dias?" />  
      <p:spinner rendered="#{!reservaHorarioController.hiddenRepetir}" min="#{reservaHorarioController.timeMin}" max="#{reservaHorarioController.timeMax}" id="spinnerBasic" value="#{reservaHorarioController.qtdDias}"/>   
   </p:panelGrid> 
<h:panelGroup>
L
ayslanms:
Em um dado momento o componente pgPanel pode não está renderizado, então o ideal é q você crie um panel (panelGroup é muito bom nesses casos) acima dele, e dê update nele. Exemplo:
<h:outputLabel rendered="#{!reservaHorarioController.hiddenRepetir}" value="Atualizar todos horarios da mesma solicitação:" />  
<h:selectBooleanCheckbox rendered="#{!reservaHorarioController.hiddenRepetir}" id="updateAll" value="#{reservaHorarioController.updateAll}" />  
<br />  
<h:outputLabel rendered="#{reservaHorarioController.hiddenRepetir}" for="repetir" value="Repetir:" />  

<p:selectBooleanCheckbox rendered="#{reservaHorarioController.hiddenRepetir}" id="repetir" value="#{reservaHorarioController.repetir}" >  
    <p:ajax event="change"  update="pgPanel" listener="#{reservaHorarioController.showRepetir}"/>  
</p:selectBooleanCheckbox>  

<h:panelGroup id="pgPanel" >
   <p:panelGrid rendered="#{reservaHorarioController.hiddenRepetir}">  
      <h:outputLabel rendered="#{!reservaHorarioController.hiddenRepetir}" value="Quantidade de dias?" />  
      <p:spinner rendered="#{!reservaHorarioController.hiddenRepetir}" min="#{reservaHorarioController.timeMin}" max="#{reservaHorarioController.timeMax}" id="spinnerBasic" value="#{reservaHorarioController.qtdDias}"/>   
   </p:panelGrid> 
<h:panelGroup>

Fiz conforme o seu conselho mais ainda não deu certo :(
Pode ocorrer alguma coisa por isso está dentro de um popup???

A

Tenta remove o rendered do checkbox.

P

qual o escopo do seu bean ?? se estiver em request ou mesmo sem tenta usar com o viewScoped

L

Ele está como Session.

L

Removi só pela dica, mas não é isso não

P

cadê teu botão de ação? O botão tem que fazer uso da propriedade “update” sobre o objeto que se deseja sofrer a atualização. Ex: <p:commandButton … update=“idPainel” … />

Caso não queira que isso seja feito via ajax, use o h:commandButton.

L

peerless:
cadê teu botão de ação? O botão tem que fazer uso da propriedade “update” sobre o objeto que se deseja sofrer a atualização. Ex: <p:commandButton … update=“idPainel” … />

Caso não queira que isso seja feito via ajax, use o h:commandButton.

Boa tarde! Acho que não entendeu meu problema, mas vou explica-lo novamente:
Tenho um

<p:selectBooleanCheckbox rendered="#{reservaHorarioController.hiddenRepetir}" id="repetir" value="#{reservaHorarioController.repetir}" > <p:ajax event="change" update="pgPanel" listener="#{reservaHorarioController.showRepetir}"/> </p:selectBooleanCheckbox>
Ao checar (E disparado o ajax pelo evento onchange) o mesmo é para renderizar o seguinte componente :

<h:panelGroup id="pgPanel" > <p:panelGrid rendered="#{reservaHorarioController.hiddenRepetir}"> <h:outputLabel rendered="#{!reservaHorarioController.hiddenRepetir}" value="Quantidade de dias?" /> <p:spinner rendered="#{!reservaHorarioController.hiddenRepetir}" min="#{reservaHorarioController.timeMin}" max="#{reservaHorarioController.timeMax}" id="spinnerBasic" value="#{reservaHorarioController.qtdDias}"/> </p:panelGrid> <h:panelGroup>
Só que ele não renderiza, ja usei o debug e o valor está sendo mudado corretamente ao checar ou não, pelo firebug vejo o ajax executando mais não sei porque no form não acontece simplesmente nada.

Criado 17 de dezembro de 2012
Ultima resposta 21 de dez. de 2012
Respostas 8
Participantes 4