This seems working well ! Indeed the problem - whatever it was - was located into the ui:repeat id. This component is a NamingContainer, and its id should depend on current row key - when used in a table - but this does not occur, the id is fixed and bound to the very first row. Exactly as it did for h:commandLink. Ok, I learned about tr:iterator today, never met before. Now commandLink id are generated properly. This game is complex enough concerning ui:repeat vs. c:forEach, I didn't miss a further iterator :'( .
The overall table layout is conditioned by a few rules:
- tr:table accepts just tr:columns components, so I *must* use c:forEach (which is not a component) for providing dynamic columns. My only chance, but it works well. - columns can be either text, icons or toolbars. Choice is driven by c:if. Toolbar composition is dynamic as well. I cannot use c:forEach again since this tag is evaluated at compile-time, while rows are provided at rendering-time. So ui:repeat was again the only choice left around.
Anyway it works, many thanks.

-- Renzo

Adam Winer wrote:
Wow, ui:repeat in c:forEach in tr:table.  You are a glutton
for punishment!

What happens in that example if you swap in tr:iterator
for ui:repeat?

-- Adam


On 6/20/07, Renzo Tomaselli <[EMAIL PROTECTED]> wrote:
Using tr:commandLink in the previous example seems ok, since proper row
keys are used. Don't know why h:commandLink does not work.
However my original example is a bit more complex as a command cell
contains a toolbar, and column set is iterated over by Facelets c:forEach:

<tr:table id="result" var="row"   ...
          <c:forEach var="column" items="#{bean.columnHeaders}"
varStatus="iteration">
               <tr:column>
                       .....
                        <h:panelGrid>
                            <ui:repeat var="spot"
value="#{cx:getToolbar(row, iteration.index)}">
                                <tr:commandLink immediate="true"
action="#{spot.execute}" disabled="#{spot.disabled}">
                                     <h:graphicImage
value="#{spot.icon}" style="border: 0px" title="#{spot.tooltip}"/>
                                </tr:commandLink>
                            </ui:repeat>
                        </h:panelGrid>

This does not work. CommandLink id of the first row is repeated for all
rows, while ui:repeat is ok in the sense that it appends an index to
every id.
Btw, I was wrong in my previous msg: a progressive id should appear just
because it's the way I generate row keys as returned by getRowKey.
It's just that the first row key is repeated.
I feel I will spend a debugging evening ...

-- Renzo

Adam Winer wrote:
> Question:  does this happen if you use tr:commandLink?
> h:commandLink certainly should work, just trying to
> reduce the set of possibilities.
>
> -- Adam
>
>
>
> On 6/20/07, Renzo Tomaselli <[EMAIL PROTECTED]> wrote:
>> Hi, while using a command link in a tr:table cell, the action method
>> gets multiple events upon icon click, actually as many events as
>> rendered rows.
>> Coding is something like:
>>
>> <tr:table id="result" var="row"   ...
>>                 <tr:column>
>>                                 <h:commandLink immediate="true"
>> action="#{row.execute}">
>>                                      <h:graphicImage
>> value="#{sessionBean.map['trash']}" style="border: 0px"/>
>>                                 </h:commandLink>
>>
>>  From rendered page, I noticed that all links are rendered as:
>>
>> <a class="OraLink" href="#"
>> onclick="submitForm('browser',0,{source:'splitty:tabby:result:d6:0:_id159'});return
>>
>> false;">
>>   <img style="border: 0px none ;"
>> src="/AxxBrowser/skins/skin1/images/trash.gif"/>
>> </a>
>>
>> while (I guess) it should be 0:_id159, 1:_id159, 2:_id159 ...
>> I guess from debugging that event generation occurs once per row since
>> component id is repeating, thus event source matches multiple times
>> (from CommandLinkRenderer.java).
>>
>> -- Renzo
>>
>>
>
>



Reply via email to