Motivazione: Voglio ridurre le dimensioni della pagina quando si accede, quindi ho pensato che il rendering pigro su modalPanels sarebbe stato d'aiuto. L'idea è di rendere il modalPanel quando l'utente fa clic sul link che lo visualizza.modalPanel rendering pigro quando visualizzato
Desidero rendere pigro su rich:modalPanel
quando viene fatto clic sul collegamento per visualizzarlo. Per raggiungere questo obiettivo ho trovato un modo:
Codice del modalPanel
, avvolto all'interno di un a4j:outputPanel
<a4j:outputPanel id="a4jPanel">
<rich:modalPanel id="panel" rendered="#{bean.renderPanel}">
<!-- here modalPanel things -->
</rich:modalPanel>
</a4j:outputPanel>
Codice della backing bean (scope di sessione):
public boolean isRenderPanel() {
return renderPanel; //default value is false;
}
public void setRenderPanel(boolean value){
this.renderPanel=value;
}
public setRenderFalse(){
this.setRenderPanel(false);
}
Codice della pagina dove è stato invocato:
<a4j:form>
<a4j:jsFunction name="setRenderFalse" action="#{user.setRenderFalse}"/>
<a4j:commandLink value="render and show" oncomplete="Richfaces.showModalPanel('panel');setRenderFalse();" reRender="a4jPanel">
<f:setPropertyActionListener target="#{user.renderPanel}" value="true" />
</a4j:commandLink>
</a4j:form>
Problemi:
La modalPanel deve essere avvolto all'interno di un
a4j:outputPanel
perché reRendering direttamente l'modalPanel non funziona (ho mai capito perché).Dopo il rendering, è necessaria una richiesta aggiuntiva per impostare il valore di rendering su falso (il bean è impostato sulla sessione). Altrimenti se ricarichiamo la pagina non ci sarà alcun rendering pigro perché il valore è stato impostato su
true
.Il supporto bean deve gestire una proprietà di mantenere lo stato di ogni modalPanel, anche se questa proprietà è impostata
true
ogni volta che il collegamento è scattato ed impostatofalse
quando la richiesta è terminata. Ho provato a mantenere lo statorendered
con le variabili JS ma non sembra funzionare (vengono letti solo una volta che la pagina è stata caricata e mai più).
Un modo più elegante per farlo?
Sembra una soluzione pulita. Ci proverò. Se funziona, la taglia è tua :) – pakore
Ha funzionato bene! Grazie. – pakore
Grande, felice che sia stato d'aiuto. –