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>