Martin, this is just an EL function. This approach is a nested two-loop schema:

for each row
    for each column in current row
       fetch value (row, column)
          ....

in my taglib.xml the retrieving function is declared as:

    <function>
        <function-name>getValueAt</function-name>
        <function-class>com.conaxo.jsf.Record</function-class>
        <function-signature>Object getValueAt(com.conaxo.jsf.Record, int)</function-signature>
    </function>

where Record instances are just rows, and function implementation is (in class Record):

    public static Object getValueAt(Record record, int index) {
        if (record == null)
            return null;
        return record.getValue(index);
    }

I had to use a function since a getter on Record cannot take any index argument to retrieve current column.
At this point everything depends on your actual implementation.

-- Renzo

Martin Hinterndorfer wrote:
Thank you very much. This might help a lot.
One question remains: how do you resolve the actual value, which should be displayed?
In the code-snipped you provided it works with cx:getValue(row, index)
Is this a special tag-library I can use too?



2007/9/10, Renzo Tomaselli <[EMAIL PROTECTED]>:
Andrew,
c:forEach inside tr:table works perfectly, even when changing column layout from request to request. This topic has been discussed on this list sometime ago. Something like this:

        <tr:table id="result"
                value="#{bean.data}"
                var="row"
                rows="#{bean.rowsPerPage}"
                varStatus="rowIndex"
                ....

            <c:forEach var="column" items="#{bean.columnHeaders}" varStatus="iteration">
                <tr:column align="#{column.alignement}" noWrap="true">
                    <f:facet name="header">
                        <tr:outputText value="#{column.localizedLabel}"/>
                    </f:facet>
                    <c:if test="#{column.type == 0}">
                        <tr:outputText value="#{cx:getValueAt(row, iteration.index)}" inlineStyle="padding-right: 10px"/>
                    </c:if>
                    <c:if test="#{column.type == 1}">
                        <h:graphicImage value="#{cx:getValueAt(row, iteration.index)}"/>
                    </c:if>
                    <c:if test="#{column.type == 2}">
                        <h:graphicImage value="#{cx:getValueAt(row, iteration.index)}" style="cursor: pointer;"
                           
                            />
                    </c:if>
                    <c:if test="#{column.type == 3}">
                        <cx:toolbarHolder bean="#{cx:getValueAt(row, iteration.index)}" />
                    </c:if>
                </tr:column>
            </c:forEach>

On the other hand, I'm not sure that tr:table accepts non-column children, such as tr:iterator. For example, ui:repeat wouldn't work.

-- Renzo


Andrew Robinson wrote:
As a work around, if you are using facelets you could use c:forEach to
generate new column components during the facelet build. I haven't
used it yet, so not sure if it would work, but have you tried

<tr:iterator>? If it works, the view may be something like:

<tr:table value="#{rows}" ...>
  <tr:iterator value="#{columns}" ...>
    <tr:column>
  </tr:iterator>

</tr:table>

Like I say, I have no idea if this would work, but worth a shot or at
least a look in the code for the DesktopTableRenderer

-A

On 9/10/07, Martin Hinterndorfer 
<[EMAIL PROTECTED]> wrote:
  
Hi everyone!

I need to build a table with a variable amout of columns (with different
headers and data types).
We are planning to use trinidad, whereas trinidad has no <columns>-Tag, like
tomahawk has.

As far as I know, I can use the binding attribute to build the
component-tree programatically,
but it looks as if the table will become quite complex (buttons, validators,
converters...), so this is not a

very preferable approach.

Does anybody have experience in mixing a trinidad application with the
tomahawk <t:dataTable> and <t:columns> components?

Any pros or cons?

Thanks in advance!


Martin Hinterndorfer

    
  

Reply via email to