Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida no Ex. 10 da Aula 9 - Componentes ricos com Primefaces

Oi pessoal,

Não ficou claro pra mim por qual motivo o uso de ajax em um commandButton do Primefaces me obriga a colocar o @this no atributo process. Todas as fases são acionadas, mas o dataTable de autores não é atualizado se estiver sem o @this como mostrado abaixo:

<p:commandButton value="Gravar Autor" action="#{livroBean.gravarAutor}" process="selecionaAutor" update="tabelaDeAutores" />

No entanto, se eu fizer como o mostrado na video aula, inserindo o @this no atributo process funciona, tudo funciona normalmente:

<p:commandButton value="Gravar Autor" action="#{livroBean.gravarAutor}" process="@this selecionaAutor" update="tabelaDeAutores" />

Não fez sentido pra mim, uma vez que o @this neste caso representa o p:commandButton. Achei uma explicação no stackOveFlow mas ainda não consegui entender. Nos exercícios anteriores, com componentes standard da JSF, bastou informar o selecionaAutor no atributo execute da tag ajax para que somente o componente informado fosse submetido ao servidor.

Alguém pode me dar uma força ?

4 respostas
solução!

Olá,

Achei o seguinte post no StackOverflow: http://stackoverflow.com/questions/25339056/understanding-process-and-update-attributes-of-primefaces

"JSF will skip processing of all other components which are not covered by process attribute. Also, components whose rendered attribute evaluates to false during apply request values phase will also be skipped as part of safeguard against tampered requests."

JSF irá pular o processamento de todos os outros componentes que não são abrangidos pelo atributo process. Além disso, componentes cujo atributo rendered é avaliado para false durante a fase apply request values serão também pulados como parte da salvaguarda contra requisições intrometidas.

Como vimos na prática, somente a lista de autores é atualizada como efeito da ação do botão.

Obrigado, Cassius...

Oi Marco,

o @this garante que a action será executada, aquele: action="#{livroBean.gravarAutor}"

ok?

abs

Oi Nico, OK, obrigado !