I'm trying to iterate over a list and pass the index from each item in that 
list to an actionlistener method. I've tried two methods - ui:repeat and 
c:forEach, but both approaches have drawbacks.

Note, I also need to have an html "id" attribute assigned to each  
(a4j:commandLink) dynamically - via the EL. This is so that my javascript can 
reference these elements later.

<c:forEach items="${personList}" var="person">          
  |    <a:commandLink id="person#{person.index}" 
action="#{foo.bar(person.index)}">#{person.name}</a:commandLink>
  | </c:forEach>

public String bar(Long index) { 
  |    log.info(index); 
  |    return null;
  |  }

With c:forEach, the html "id" of each <a:commandLink> component is set properly 
- it sends up being id="testForm:person1" ... id="testForm:personN" . But, the 
bar() method's "index" is properly is null instead of being set to the value 
passed in with #{person.index}

Now with ui:repeat:

<ui:repeat value="${personList}" var="person">          
  |    <a:commandLink id="person#{person.index}" 
action="#{foo.bar(person.index)}">#{person.name}</a:commandLink>
  | </ui:repeat>

In the 2nd case, the bar() method's "index" is properly set to the value passed 
in with #{person.index}. But, the html "id" of the <a:commandLink> is not set 
(instead it is something like "testForm:j_id62:1:person"). 

I've found that html "ids" cannot be set with EL on components within 
<h:dataTable> or <ui:repeat>. But, the html "id" can be set on a component that 
is inside a <c:forEach> as in the 1st example.

So, this is a case where one solution works for one thing but not for the other 
and vice versa. I would greatly appreciate any advice. Thanks.

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3990142#3990142

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3990142
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to