2
respostas

Atributo render=

Sou iniciante em JSF e estou com uma dúvida básica sobre AJAX. Consegui fazer funcionar as chamadas AJAX com curso JSF-1, sem problemas. Porém, brincando um pouco com a aplicação desenvolvida, tentei fazer alguns <h:commandLink> funcionarem com AJAX, mas a atualização do <h:dataTable> só aconteceu se eu fizer um <f:ajax render="@form".../> ou <f:ajax render="meuForm".../>. É isso mesmo? Qual a parte conceitual envolvida? Segue código abaixo:

        <h:form id="formAutores">        
            <fieldset>
                <legend>Autores</legend>                

                <h:dataTable id="tableAutores" value="#{autorBean.autoresGravados}"    var="autor">

                    <h:column>
                        <h:outputText value="[ #{autor.id} ] #{autor.nome}"/>
                    </h:column>

                    <h:column>
                        <h:commandLink id="linkRemover" value="remover" action="#{autorBean.removerAutor(autor)}">

                            <!-- estes executam a remoção do banco de dados mas não atualizam a tela  -->
                            <!-- f:ajax execute="linkRemover" render="tableAutores"/ -->
                            <!-- f:ajax execute="linkRemover" render=":tableAutores"/ -->
                            <!-- f:ajax execute="linkRemover" render=":formAutores:tableAutores"/ -->


                            <!-- estes funcionam !!!  -->
                            <f:ajax execute="linkRemover" render=":formAutores"/>
                            <!-- f:ajax execute="linkRemover" render="@form"/ -->
                        </h:commandLink>
                    </h:column>

                </h:dataTable>

            </fieldset>
        </h:form>
2 respostas

(consegui colar o código, finalmente)

Olá Paulo,

Realmente ele deveria funcionar referenciando diretamente o datatable.

Pelas pesquisas que andei fazendo aqui, isso parece ser um bug do Mojarra. As soluções recomendadas nesse caso todas apontam para colocar o datatable dentro de um form e referenciar o próprio form no render.

Talvez aqui valesse a pena testar o mesmo código em outra implementação do JSF que não seja o Mojarra para ver se o problema se repete.