Jsf+jstl

opa!

tenho uma página jsf, nessa página tenho uma lista, como posso iterar essa lista com c:forEach do JSTL?

abraço

Olá. Estou com esse mesmo problema.

Estou tentando fazer um rich:tabPanel dinâmico, dependendo das permissões dos usuário para acessar determinadas páginas. Para iterar na lista de tabs, estou utilizando o seguinte código:

	<rich:tabPanel>
		<c:forEach items="#{userBean.allowedTabs}" var="tab">
			<rich:tab>
				<f:facet name="label">
					<h:outputText value="#{tab.name}" />
				</f:facet>
				<jsp:import page="#{tab.page}" />
			</rich:tab>
		</c:forEach>
	</rich:tabPanel>

O que acontece nesse caso é que a sentença “#{userBean.allowedTabs}” é reconhecida como a Sting “#{userBean.allowedTabs}”, e não como a lista de elementos contidos no atributo allowedTabs do objeto userBean.
Se eu alterar a sentença para “${userBean.allowedTabs}”, aí sim ele reconhece corretamente a lista de objetos apropriados, entretanto, eu não consigo utilizar o objeto tab definido no atributo var nas tags jsf/richfaces, pois o objeto não é reconhecido.

Procurei alguns posts aqui no fórum e achei um tópico que recomendava utilizar c:set da seguinte maneira:

	<rich:tabPanel>
		<c:forEach items="${userBean.allowedTabs}" var="_tab">
			<c:set var="tab" value="${_tab}" scope="request" />
			<rich:tab>
				<f:facet name="label">
					<h:outputText value="#{tab.name}" />
				</f:facet>
				<jsp:import page="#{tab.page}" />
			</rich:tab>
		</c:forEach>
	</rich:tabPanel>

Essa abordagem também não funcionou, pois ele define a variável como sendo apenas o último valor da lista.

Eu estou utilizando Tomcar 6, JSF 1.2, RichFaces 3.2.1-GA e JSTL 1.1. Alguém tem alguma idéia ou sujestãopara resolver esse problema?

Grato.

Olá,

JSF e JSTL não combinam, para maioria dos casos trabalhar com estas duas tecnologias só trará dor de cabeça. Caso queria iterar uma lista eu aconselho o uso de componentes como h:dataTable ou ui:repeat (Facelets) ou qualquer outro componente encontrado em alguns conjuntos de componentes como Richfaces ou Myfaces Trinidad ou Tomahawk.

Abraços e boa sorte.