Jstl + jsf

10 respostas
A

Pessoal, to tentando implementando um laço forEach com JSTL e dentro do laço desejo imprimir componentes JSF:

<c:forEach var="num" begin="1" end="10">
	<h:outputText value="#{num}"/>
</c:forEach>

Gostaria que a tag outputText mostrasse o valor da variavel ‘num’ gerada no laço forEach… não consigo, parece q o JSTL e o JSF nao se comunicam mto bem… alguém sabe como implementar algo parecido ou contornar esse problema?

10 Respostas

jayro

Cara… vou ficar acompanhando tb esse tópico… tenho interesse em JSTL…

:wink:

rponte

Bem, JSTL é utilizado em tempo de Build Time, ou seja, ele roda durante a construção da árvore de componentes, e não durante a fase de renderização (Render Time).

Neste seu caso, você está montando a árvore de componentes com 10 componentes h:outputText com o value #{num}, atente que isso ocorre durante a construção da árvore de componentes, logo ao chegar na fase de renderização o framework avaliará a EL #{num} (é somente aqui que ele avalia o valor da EL) e provavelmente não encontrará um valor para ela já que o seu escopo era “page”. (Não tenho certeza, mas talvez ele avalie com o último valor do loop, no caso o valor seria 10).

Enfim, quando pensar em utilizar JSTL com JSF pense em utiliza-lo para construir a árvore de componentes e não renderizar (X)HTML como se usa comumente. Para isso, o componente h:dataTable ou a tag ui:repeat (Facelets) te ajudará!

Abraços e boa sorte.

gleise

:idea: Uma alternativa ao h:dataTable é o t:dataList do MyFaces Tomahawk, caso você queira renderizar a lista sem usar tabela.

A

Eu preciso renderizar varios componentes dentro do laço… o outputText foi apenas um exemplo pra demonstrar como ocorria o erro… preciso renderizar tabPanel e dentro delas outros varios componentes…
Gleise vc poderia me dar um exemplo? sou meio leigo em JSF, Tomahawk e afins, hehehe!!!

maurenginaldo

Qual a versão do Jsf vc está utilizando? Para funcionar com o Jstl precisa da 1.2.

Com relação ao dataList, segue link de exemplo

http://livedemo.exadel.com/richfaces-demo/richfaces/dataLists.jsf;jsessionid=087BFC6B6844CF329E3104EEA461E606?c=dataList

A

Pessoal mto obrigado… vou fazer uns testes aqui!!

A

É pessoal não funcionou… estou tentando fazer o seguinte:
Quero iterar uma lista e pra cada entrada na lista criar uma aba no componente rich:tabPanel

<rich:tabPanel id="tabPlantas" switchType="ajax" selectedTab="tab">
	<rich:dataList var="local" value="#{plantasBean.locals}" rows="10">
		<rich:tab name="tab" rendered="#{local.numLocal == plantasBean.localSelected}">
			<f:facet name="label">
				<h:outputText value="#{local.numLocal}"/>
			</f:facet>
		</rich:tab>
		<rich:tab rendered="#{local.numLocal != plantasBean.localSelected}">
			<f:facet name="label">
				<h:outputText value="A"/>
			</f:facet>
		</rich:tab>
	</rich:dataList>
</rich:tabPanel>

Seria pra iterar entre os locais e imprimir uma tab de nome “tab” se o local fosse o local selecionado, e outra tab de um nome qualquer se nao fosse…
Ele até itera mas nao gera as tabs… e da um erro no render time :frowning:
Alguma coisa que esteja fazendo errado?

maurenginaldo

Para esse tipo de montagem de tela dinâmica, sugiro a vc que faça no java e associe ao binding de um componete tabPanel.

A

vc tem um exemplo de como faz isso? desculpe sou bem leigo em jsf

maurenginaldo

A propriedade binding serve para associarmos o componente Jsf ao seu componente similar no java.
Por exemplo:

//No jsh:
<h:outputText binding="#{bean.texto}">

//No java:
HtmlOutputText texto;
texto.setRendered(false);

No exemplo indica que o seu componente na tela não será renderizado.
Foi só um exemplo didático. No java vc pode fazer tudo com o comonente, porém com mais recursos.

Certo, :wink:

Criado 3 de julho de 2008
Ultima resposta 7 de jul. de 2008
Respostas 10
Participantes 5