2013-01-08 18 views
5

Il listener viene attivato per p: selectBooleanButton in parent ui: repeat, ma il listener per p: selectBooleanButton non viene attivato per l'interno/figlio ui: repeat.primefaces p: selectBooleanButton listener non attivato nell'interfaccia utente nidificata: ripetizione

Non possiamo usare moduli annidati. Eventuali suggerimenti.

<h:form prependId="false"> 
<ui:repeat value="#{xBean.sectionsList}" var="sectionItem"> 
    <p:fieldset> 
    <p:selectBooleanButton onLabel="ON" offLabel="OFF" value="#{sectionItem.checked}"> 
    <p:ajax listener="#{xBean.selectSection}"/> 
    </p:selectBooleanButton> : 
    <ui:repeat value="#{sectionItem.sectionOptionsList}" var="sectionOptionItem">    
    <p:selectBooleanButton onLabel="ON" offLabel="OFF" value="#{sectionOptionItem.checked}"> 
    <p:ajax listener="#{xBean.selectSectionOption}"/> 
    </p:selectBooleanButton> 
    </ui:repeat> 
    </p:fieldset> 
</ui:repeat> 
</h:form> 
+0

Ho appena testato con Primefaces 3.5, per me funziona perfettamente. –

risposta

2

Il <ui:repeat> è un tag di tempo di visualizzazione. Quindi, è fisicamente presente nell'albero del componente JSF e genera il suo output HTML tante volte quanto necessario per iterare sul valore.

In altre parole, essi (p: selectBooleanButton) devono essere preparati durante il tempo di creazione della vista anziché il tempo di rendering della vista.

Il JSTL <c:forEach> è un tag di generazione della vista. Genererà fisicamente più componenti nell'albero dei componenti JSF.