JSF 1.2 - dificuldade para integrar c:forEach e f:selectItem

2 respostas
A

Meu problema é o seguinte:
Tenho um selectManyCheckBox que funciona perfeitamente.

<h:selectManyCheckbox binding="#{regiaoBean.paisesSelecionados}" converter="converterGeneric" layout="pageDirection" styleClass="texto" >
   <f:selectItems value="#{comboBean.listarCheckBoxPais}" />
   <a4j:support event="onchange" action="#{regiaoBean.adicionaPaises}" reRender="listagemPaises"/>
</h:selectManyCheckbox>

Mas preciso adicionar uma segunda funcionalidade nesses checkBoxes.
Preciso que o label de cada checkBox seja um link (na verdade preciso que seja chamada uma action).
Pensei então em aproveitar a integração entre JSF e JSTL para fazer isso usando c:forEach + f:selectItem.
Mas o máximo que consegui fazer foi gerar vários checkBoxes sem label, usando o código abaixo:

<h:selectManyCheckbox binding="#{regiaoBean.paisesSelecionados}" converter="converterGeneric" layout="pageDirection" styleClass="texto">
   <c:forEach items="${comboBean.listarCheckBoxPais}" var="pais">
      <f:selectItem itemLabel="#{pais}"/>
   </c:forEach>
</h:selectManyCheckbox>

Isso porque só consigo acessar o valor da minha variável do forEach usando ${}, em vez de #{} (Suponho que só possa acessar dessa forma. Se houver alguma outra forma, por favor me digam).
Mas se eu trocar o trecho [color=red]itemLabel="#{pais}" [/color] por [color=red]itemLabel="${pais}" [/color] o netbeans diz que não posso usar uma “$-expression” ali.

Alguém tem alguma sugestão, ou propõe outra forma para que eu consiga adicionar essa segunda funcionalidade nos meus checkBoxes?

Agradeço antecipadamente eventuais respostas.

Diego “Frango” Wanch

EDIT:

Minha intenção era fazer algo assim:

<h:selectManyCheckbox binding="#{regiaoBean.paisesSelecionados}" converter="converterGeneric" layout="pageDirection" styleClass="texto">
   <c:forEach items="${comboBean.listarCheckBoxPais}" var="pais">
      <h:panelGroup>
         <f:selectItem value="#{pais}"/>
         <h:commandLink value="#{pais}" action="#{regiaoBean.estadosPais}" styleClass="texto">
            <f:setPropertyActionListener target="#{regiaoBean.paisAtual}" value="#{pais}" />
         </h:commandLink>                                        
      </h:panelGroup>
   </c:forEach>
</h:selectManyCheckbox>

Ou seja, deixar o checkbox sem label e usar o outpulLink como label pra ele e deixar também nele a chamada pra minha action.
Mas aí surge mais uma complicação:
O selectManyCheckbox espera um conjunto de UISelectItem, e colocando num panelGroup ele não renderiza nenhum checkbox.

2 Respostas

A

APAGAR

M

Com a unificação da EL com o Jsf na versão 1.2, isso foi extinto:
${pais}, todos os acesso são #{pais}

Criado 22 de fevereiro de 2008
Ultima resposta 22 de fev. de 2008
Respostas 2
Participantes 2