Core Tag foreach [RESOLVIDO]

7 respostas
J

Olá pessoal,

Possuo uma página .xhtml e nela tenho um formulário com alguns campos.
No momento que entro nessa página um model é carregado e desse modo os campos são preenchidos e mostrados na tela, até ai tudo certo.
A minha dúvida fica por conta do <h:outputLabel> dentro da tag <c:foreach>, ele não é carregada inicialmente como os outros campos, somente é carregada com seus valores quando faço uma nova requisição clicando novamente no link para abrir o formulário.
Será que esse <c:foreach> não “roda” no momento que dou esse primeiro load na página e só faz a iteração no segundo load?

Não sei se ficou clara a dúvida, segue partes do meu código.

Cabeçalho onde possui a referência para a tag

<?xml version="1.0" encoding="UTF-8"?> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.prime.com.tr/ui" xmlns:ui="http://java.sun.com/jsf/facelets" template="comuns/template.xhtml">

foreach da página

<td class="lista_itens_container"> <h:panelGroup sytle="margin-left:9px" id="listaEmails" rendered="true"> <c:forEach items="#{funcionarioController.model.emails}" var="listaEmails" > <h:outputLabel value="main:" rendered="#{listaEmails.emailPrincipal}"/> <h:outputLabel styleClass="label_lista_item" value="#{listaEmails.email}"/> <p:commandLink styleClass="cmdlink_remover_item" value="x" action="#{funcionarioController.removerEmail}" update="listaEmails"> <f:param name="descEmail" value="#{listaEmails.email}"/> </p:commandLink> </c:forEach> </h:panelGroup> </td>

No pom.xml a versão jstl é 1.2.

Obrigado.

7 Respostas

A

cara,

pq vc nao usa http://www.primefaces.org/showcase/ui/datagrid.jsf, ne mais facil nao.

t+

J

Então, esqueci de explicar, mas eu tenho um campo e um botão onde coloco esse email a ser gravado, embaixo dele que faço esse output com o <c:foreach>, então acho que um datagrid sairia do objetivo.

No caso esse output que fica embaixo do campo é para exibir quais os emails que ele tem cadastrado.

A

será que nao tem haver com seu css, ja tentou tirar todos o css e testar?

J

alissonvla, muito obrigado pela resposta, tirei o css é mesmo assim continuo com esse probleminha, no caso o css só muda a aparencia do texto, nada demais.

Pesquisei algo relacionado, não sei se o primefaces gera algo problema em relação à isso.

Troquei o <p:commandLink> e coloquei um <h:commandLink>, mas continuo com o problema.

Alguém saberia dizer se pode ser relacionado ao primefaces?

E

Qual o h:outputLabel que não aparece? Ambos?

Está usando JPA para popular a lista de emails? Acredita na possibilidade de um delay em popular as propriedades do email quando solicitado pelo JPA?

vou dar algumas sugestões:

Já tentou usar o ui:repeat? (no JSF 1.2 ele não funcionava legal com ajax, mas acho que já solucionaram esse problema no JSF2, por causa da mudança de escopo, e o botão teria problemas para funcionar, se o bean não estivesse vivo)
Já tentou trucar pelo h:outputText?

J

evefuji:
Qual o h:outputLabel que não aparece? Ambos?

Está usando JPA para popular a lista de emails? Acredita na possibilidade de um delay em popular as propriedades do email quando solicitado pelo JPA?

vou dar algumas sugestões:

Já tentou usar o ui:repeat? (no JSF 1.2 ele não funcionava legal com ajax, mas acho que já solucionaram esse problema no JSF2, por causa da mudança de escopo, e o botão teria problemas para funcionar, se o bean não estivesse vivo)
Já tentou trucar pelo h:outputText?

Obrigado pela resposta.

Populo com JPA.
Em relação ao delay eu acredito que não, a lista traz todos os valores dos campos inclusive do email.
Anteriormente tentei com ui:repeat e outputText e ficou com o mesmo resultado.

Essa minha página contém outros outputs semelhantes que além de ter o foreach em comum são listas que pertecem ao model e estão com o problema. O fato de ser uma lista dentro do model pode ser o motivo do problema?

Acho que é algo bem simples, mas não consigo observar. :?

J

Johnata:
evefuji:
Qual o h:outputLabel que não aparece? Ambos?

Está usando JPA para popular a lista de emails? Acredita na possibilidade de um delay em popular as propriedades do email quando solicitado pelo JPA?

vou dar algumas sugestões:

Já tentou usar o ui:repeat? (no JSF 1.2 ele não funcionava legal com ajax, mas acho que já solucionaram esse problema no JSF2, por causa da mudança de escopo, e o botão teria problemas para funcionar, se o bean não estivesse vivo)
Já tentou trucar pelo h:outputText?

Obrigado pela resposta.

Populo com JPA.
Em relação ao delay eu acredito que não, a lista traz todos os valores dos campos inclusive do email.
Anteriormente tentei com ui:repeat e outputText e ficou com o mesmo resultado.

Essa minha página contém outros outputs semelhantes que além de ter o foreach em comum são listas que pertecem ao model e estão com o problema. O fato de ser uma lista dentro do model pode ser o motivo do problema?

Acho que é algo bem simples, mas não consigo observar. :?

Olá pessoal.

Gostaria até de pedir desculpa ao evefuji, ele me deu a dica do ui:repeat eu testei, mas esqueci de trocar “items” do foreach por “value”, desse modo não funcionou com a tag do facelets, mas vi direito e coloquei corretamente e funcionou.

Complementando a dica do nosso colega que me ajudou eu pesquisei e entendi que o JSTL roda durante a contrução da árvore de componentes e não na fase de renderização, por isso o problema durante o primeiro load da página.

agora o correto ficou…

<td class="lista_itens_container"> <h:panelGroup sytle="margin-left:9px" id="listaEmails" rendered="true"> <ui:repeat value="#{funcionarioController.model.emails}" var="listaEmails"> <h:outputLabel value="main:" rendered="#{listaEmails.emailPrincipal}"/> <h:outputLabel styleClass="label_lista_item" value="#{listaEmails.email}"/> <p:commandLink styleClass="cmdlink_remover_item" value="x" action="#{funcionarioController.removerEmail}" update="listaEmails"> <f:param name="descEmail" value="#{listaEmails.email}"/> </p:commandLink> </ui:repeat> </h:panelGroup> </td>

Abraços.

Criado 14 de outubro de 2011
Ultima resposta 17 de out. de 2011
Respostas 7
Participantes 3