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.

Foi útil?

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 um id 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top