Absolute reRendering utilizzando RichFaces
Domanda
Il mio problema è che RichFaces reRender
non funziona 'sotto' l'elemento corrente nella struttura di elemento; solo gli elementi superiori vengono rerendered.
C'è un modo per accedere agli elementi inferiori con AJAX?
Qualsiasi aiuto sarebbe apprezzato! Daniel
Modifica Ho modificato questa domanda a una più generale. Vedere le revisioni se interessati nella domanda iniziale.
Soluzione 2
Ecco un esempio in cui changePanel111()
cambia il contenuto di un elemento inferiore:
<h:form id="form" prependId="true">
<rich:panel id="PANEL1">
<h:outputText id="PANEL1TEXT" value="#{ajaxTestBean.panel1}"/>
<rich:panel id="PANEL11">
<h:outputText id="PANEL11TEXT" value="#{ajaxTestBean.panel11}"/>
<rich:panel id="PANEL111">
<h:outputText id="PANEL111TEXT" value="#{ajaxTestBean.panel111}"/>
</rich:panel>
</rich:panel>
<rich:panel id="PANEL12">
<h:outputText id="PANEL12TEXT" value="#{ajaxTestBean.panel12}"/>
<br/>
<a4j:commandLink value="CHANGE PANEL12" action="#{ajaxTestBean.changePanel12}">
<a4j:support reRender="PANEL12" event="onclick"/>
</a4j:commandLink>
<br/>
<a4j:commandLink value="CHANGE PANEL111" action="#{ajaxTestBean.changePanel111}">
<a4j:support reRender="form:PANEL111" event="onclick"/>
</a4j:commandLink>
</rich:panel>
</rich:panel>
</h:form>
Si noti come l'elemento inferiore deve essere identificato come form:PANEL111
.
Spero che questo aiuti!
Altri suggerimenti
-
reRender
funziona con fornendo un l'id
dell'oggetto target che si desidera rerender (all'interno dello stesso contenitore di denominazione -form
il più delle volte) - il
id
dovrebbe essere una stringa univoca, secondo html spec -
reRender
permette valore dinamico - vale a direreRender="#{myBean.currentItemsToRerender}
Sulla base di che penso che si dovrebbe essere in grado di ottenere ciò che si vuole (anche se non è del tutto chiaro)
Aggiornamento:
UIComponent.findComponent(..)
ha un algoritmo ben definito per la risoluzione ids. Così, per assoluta referenziare la tua reRendered id dovrebbe iniziare con :
e poi proseguire attraverso la gerarchia dei contenitori di denominazione.
rerender può puntare a qualsiasi componente esterno forma pure. Per esempio, questo funziona:
<h:form>
<a4j:commandButton reRender="panel"/>
</h:form>
<h:panelGrid id="panel">
...
</h:panelGrid>
Per i miei MyFaces + RichFaces App, tag <rich:panel>
non funzionava come descritto nella risposta selezionata. Quando ho cambiato in <a4j:outputPanel ajaxRendered="true" />
, ha cominciato a lavorare come dato qui "
Configurazione: MyFaces 2.1.10 (Facelets utilizzati per template) e RichFaces 4.2.3.
Spero che questo vi aiuterà.