Rerenderização absoluta usando RichFaces
Pergunta
Meu problema é que RichFaces reRender
não funciona 'sob' o elemento atual na árvore de elementos;apenas os elementos superiores são renderizados novamente.
Existe alguma maneira de acessar elementos inferiores com AJAX?
Qualquer ajuda seria apreciada!Danilo
EDITAR Editei esta pergunta para uma mais geral.Veja as revisões se estiver interessado na pergunta original.
Solução 2
Aqui está um exemplo onde changePanel111()
Altera o conteúdo de um elemento inferior:
<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>
Observe como o elemento inferior precisa ser identificado como form:PANEL111
.
Espero que isto ajude!
Outras dicas
reRender
trabalha com o fornecimento de umid
do objeto de destino que você deseja render (dentro do mesmo recipiente de nomenclatura -form
mais frequente)- a
id
deve ser uma string única, de acordo com a especificação HTML reRender
permite valor dinâmico - ou seja,reRender="#{myBean.currentItemsToRerender}
Com base nisso, acho que você deve conseguir o que deseja (embora não esteja totalmente claro)
Atualizar:
UIComponent.findComponent(..)
Possui um algoritmo bem definido para resolver IDs. Então, para referenciar absoluto, sua identificação renderizada deveria começar com :
e continue através da hierarquia dos recipientes de nomenclatura.
O reerender também pode apontar para qualquer componente fora do formulário. Por exemplo, isso funciona:
<h:form>
<a4j:commandButton reRender="panel"/>
</h:form>
<h:panelGrid id="panel">
...
</h:panelGrid>
Para meu aplicativo MyFaces + Richfaces, <rich:panel>
tag não estava funcionando conforme descrito na resposta selecionada.Quando eu mudei para <a4j:outputPanel ajaxRendered="true" />
, começou a funcionar conforme indicado aqui "<a4j:commandLink> Não é renderizado novamente"
Configuração:MyFaces 2.1.10 (Facelets usados para modelagem) e Richfaces 4.2.3.
Espero que isso ajude.