Pessoal, bom dia.
No primefaces, para atualizar uma tela, qual a diferença de usar o “:”?
update=":messages"
update="messages"
Obrigado.
Pessoal, bom dia.
No primefaces, para atualizar uma tela, qual a diferença de usar o “:”?
update=":messages"
update="messages"
Obrigado.
Basicamente, quando não tem :
o componente é buscado de forma relativa, e com o :
, de forma absoluta. Os exemplos abaixo foram descaradamente copiados daqui (que inclusive, tem uma explicação muito mais detalhada, recomendo a leitura).
Enfim, sem o :
a busca é feita de forma relativa. Ou seja, se ambos os elementos tem o mesmo pai (para ser mais preciso, se ambos estão dentro do mesmo NamingContainer
), eu posso buscá-los assim:
<h:form id="form">
<p:commandLink update="result"> <!-- OK! -->
<h:panelGroup id="result" />
</h:form>
Pois a busca é “relativa”, feita dentro do elemento pai.
Mas se eles tiverem pais diferentes (não estão no mesmo NamingContainer
), isso não funciona:
<h:form id="form">
<p:commandLink update="result"> <!-- FAIL! -->
</h:form>
<h:panelGroup id="result" />
Pois o update
estará procurando pelo id="result"
dentro do mesmo componente pai (no caso, o h:form
). Mas como ele está fora, não é encontrado.
Neste caso, precisamos do :
para que a busca seja feita de forma “absoluta”:
<h:form id="form">
<p:commandLink update=":result"> <!-- OK! -->
</h:form>
<h:panelGroup id="result" />
Agora ele encontra o result
, mesmo estando fora do h:form
.
Lembrando que o caminho deve ser completo. Por exemplo, se o result
estivesse dentro de outro elemento:
<h:form id="form">
<p:commandLink update=":result"> <!-- FAIL! -->
</h:form>
<h:form id="otherform">
<h:panelGroup id="result" />
</h:form>
Agora não funciona porque o result
está dentro de otherform
, e para referenciá-lo eu preciso usar o caminho completo (que no caso seria :otherform:result
):
<h:form id="form">
<p:commandLink update=":otherform:result"> <!-- OK! -->
</h:form>
<h:form id="otherform">
<h:panelGroup id="result" />
</h:form>