You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-user@incubator.apache.org by Daniel Hannum <dh...@quovadx.com> on 2006/11/01 17:14:31 UTC

Table with dynamic number of columns

Hi, 

 

Is it possible to create a tr:table with a dynamic number of columns? I
have a table backed by a list of objects A, in the typical way. Each row
pulls out some fixed properties of A, but A also contains a list of B's.
I want each of the B's to be some additional columns. Don't worry, I can
guarantee that all the A's have the same number of B's, so each row of
the table will have the same number of columns, but I don't know what
that number is before runtime.

 

I tried the iterator tag, but you aren't allowed to put it directly
under <table>. I tried making a column tag that contained an iterator
and N sub-columns. The results were unpredictable and I got a
ArrayIndexOutOfBounds. Before I looked too deeply into that, maybe I'm
just not supposed to do that. I don't know.

 

Another option might be to put the maximum number of columns in the
table, and set rendered=false for the ones I won't use. But that's a lot
for EL. The second column would have rendered="#{row.list.size() >= 2}",
which I don't even think is allowed in EL.

 

Options?

 

Thanks for any help you can offer.

 

Dan


Re: Table with dynamic number of columns

Posted by Rogers Reilly <ro...@s-rod.com>.
Hi Dan,

I've wrestled with this quite a bit, and I think the last is your only 
option.  Change

"#{row.list.size() >= 2}"

to

"#{row.list.size >= 2}"

and I think El will do just fine.  Otherwise you can define some static 
El function (not too painful if you're using Facelets already, I find) 
like so:  rendered="#{df:staticFuncName(row)}".

In general, you can't stick anything that's not an <tr:column> under 
<tr:table>.  I tried extending Table to accomodate a <ui:repeat> object 
(Facelets tag), but it didn't quite work.  It's possible a <c:forEach> 
Facelets tag would work since it doesn't insert a new component in the 
view tree, just stamps out x number of children (in this case 
<tr:column>s), but I had trouble changing the # of columns once I'd 
created a Table.  It seems Table initializes its # of columns on 
construction, so that changing it will yield an ArrayIndex error.

All the way around, stamping out all possible columns and then 
controlling display with "rendered" is easiest.  Another possibility is 
Tomahawk extensions, which I believe do have a dynamic-column 
<t:columns> component.

Hope this helps-
Rogers

Daniel Hannum wrote:

>Hi, 
>
> 
>
>Is it possible to create a tr:table with a dynamic number of columns? I
>have a table backed by a list of objects A, in the typical way. Each row
>pulls out some fixed properties of A, but A also contains a list of B's.
>I want each of the B's to be some additional columns. Don't worry, I can
>guarantee that all the A's have the same number of B's, so each row of
>the table will have the same number of columns, but I don't know what
>that number is before runtime.
>
> 
>
>I tried the iterator tag, but you aren't allowed to put it directly
>under <table>. I tried making a column tag that contained an iterator
>and N sub-columns. The results were unpredictable and I got a
>ArrayIndexOutOfBounds. Before I looked too deeply into that, maybe I'm
>just not supposed to do that. I don't know.
>
> 
>
>Another option might be to put the maximum number of columns in the
>table, and set rendered=false for the ones I won't use. But that's a lot
>for EL. The second column would have rendered="#{row.list.size() >= 2}",
>which I don't even think is allowed in EL.
>
> 
>
>Options?
>
> 
>
>Thanks for any help you can offer.
>
> 
>
>Dan
>
>
>  
>



Re: Table with dynamic number of columns

Posted by Arnaud MERGEY <am...@sunopsis.com>.
Hi,
 I don't use facelet, but "classic" JSP with Trinidad and tr:forEach 
works fine for my pages with table and dynamic columns

try something like this

<tr:table value="#{formModel.rows}" var="row"
             id="tabTableList">
      <tr:forEach items="#{formModel.colList}" var="property">
                 <tr:column .....

Regards,
Arnaud

Daniel Hannum a écrit :
> Hi, 
>
>  
>
> Is it possible to create a tr:table with a dynamic number of columns? I
> have a table backed by a list of objects A, in the typical way. Each row
> pulls out some fixed properties of A, but A also contains a list of B's.
> I want each of the B's to be some additional columns. Don't worry, I can
> guarantee that all the A's have the same number of B's, so each row of
> the table will have the same number of columns, but I don't know what
> that number is before runtime.
>
>  
>
> I tried the iterator tag, but you aren't allowed to put it directly
> under <table>. I tried making a column tag that contained an iterator
> and N sub-columns. The results were unpredictable and I got a
> ArrayIndexOutOfBounds. Before I looked too deeply into that, maybe I'm
> just not supposed to do that. I don't know.
>
>  
>
> Another option might be to put the maximum number of columns in the
> table, and set rendered=false for the ones I won't use. But that's a lot
> for EL. The second column would have rendered="#{row.list.size() >= 2}",
> which I don't even think is allowed in EL.
>
>  
>
> Options?
>
>  
>
> Thanks for any help you can offer.
>
>  
>
> Dan
>
>
>