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.

È stato utile?

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 dire reRender="#{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 " Non Rerendering "

Configurazione: MyFaces 2.1.10 (Facelets utilizzati per template) e RichFaces 4.2.3.

Spero che questo vi aiuterà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top