Bom, já vi esta pergunta diversas vezes, e por diversos momentos eu também fiz a pergunta: porque o c:if não funciona corretamente, porque o c:forEach não executou minha lista?
Existe uma justificativa lógica para tal, que encontrei estes dias na seção de Faqs no WIKI do Facelets. Como eu já suspeitava tinha tudo a ver com o ciclo de execução das tags. Todas as tags JSTL em Facelets são rederizadas durante a restauração da view, ou seja, antes do processamento de ações, eventos e etc.
Este comportamento pode ser notado em tags do pacote core JSF, com exceção a tag f:verbatim. As tags facelets também são renderizadas durante a restauração da view, com exceção da ui:repeat.
Solução? Para substituir c:forEach use ui:repeat e para c:if crie um h:panelGroup controlando a visualização com o atributo rendered.
April 25th, 2008 at 9:02 am
Essa do panelGroup é pog neh marcos
:S
April 25th, 2008 at 2:28 pm
O problema é que não há outro componente, porém h:painelGroup na grande maioria das vezes nem renderiza nada o que facilita a utilização dele para este fim.
July 12th, 2008 at 4:46 pm
O post foi interessante, porém só ficou simples e meio confusa a explicação.
Eu fiquei de postar sobre isso, mas ando meio sem tempo, porém deixe-me tentar resumir:
As tags JSP e JSTL funcionam em fase de buildtime, ou seja, elas devem ser usadas para construir a árvore de componentes, e não para renderizar (X)HTML. Os componentes faces é que se preocupam em renderizar código (X)HTML na fase de rendertime.
Enfim, basicamente JSTL é para montar a árvore de componentes, e não decidir como será renderizado a GUI.
Continue com teus post sobre JSF Marcos, infelizmente hoje o número de blogs nacionais sobre a tecnolgia ainda é escasso.
Abraços.