You can use a bean model for variable number of columns, that one also
gives you full control over conduits etc.

Inject BeanModelSource and create a display model for your data source, use
.include (or similar) to whitelist the desired attributes in the generated
model and model.add to get your synthetic columns defined.

-- 
Chris

On Tue, Jun 28, 2016 at 3:13 PM, Davide Vecchi <d...@amc.dk> wrote:

> Thanks for the answers, it's becoming more clear.
>
> The possibility suggested by Kalle makes sense, however I made some test
> about it and I don't think it's the cause of my problem. This grid column
> was being sorted without exceptions with Java 7 + Tapestry 5.3.7, plus I
> checked and none of the values in the column is null. I have also tested
> calling Arrays.sort with some null elements and it throws a null pointer
> both with Java 7 and Java 8.
> My problem has most probably to do with the fact that that column is not
> part of the grid data source, as Cezary suggested, and it was so also when
> we were using Java 7.
>
> About Cezary's hypothesis, I think my problem is definitely in that area,
> but there is probably also something going on related to the different
> Tapestry version because the column was defined in the same way when using
> 5.3.7 and in that case there was no exception.
>
> The column is defined like this:
>
> - In the page template, one param of the grid tag is
>
>         t:add="prop:gridAdd"
>
> - In the page Java code, there is the corresponding
>
>         public String getGridAdd() {
>                 return " myColumn1, myColumn2, myColumn3, myColumn4";
>         }
>
>   where let's say that "myColumn3" is the column whose sorting fails.
>
> - In the page template, within the t:grid tag there is the definition of
> the customized content of that column:
>
>         <p: myColumn3Cell>${ myColumn3}</p: myColumn3Cell>
>
> - In the page Java code, there is the method returning the value for that
> column:
>
>         public String getMyColumn3()
>         {
>                 return aStringThatIsNeverNull;
>         }
>
> So I'm trying to find out if this way of defining my column is not right
> in 5.3.8 although it was not failing in 5.3.7, in order to rectify it.
>
>
> -----Original Message-----
> From: Cezary Biernacki [mailto:cezary...@gmail.com]
> Sent: Monday, June 27, 2016 18:10
> To: Tapestry users <users@tapestry.apache.org>
> Subject: Re: Null pointer on sort with 5.3.8 that didn't occur with 5.3.7
>
> Your stack trace seems to indicate that conduit (a mechanism connecting
> Tapestry with a column) is not available. It can happen if the column is
> manually added to the model. Was the column sortable with Tapestry  5.3.7?
> How is this column defined?
>
> Best regards,
> Cezary
>
>
> On Mon, Jun 27, 2016 at 4:43 PM, Davide Vecchi <d...@amc.dk> wrote:
>
> > Hi everybody
> >
> > For now I cannot post code to reproduce this problem because it only
> > occurs with one columns of a specific grid from a big application and
> > so far I wasn't able to extract the code to reproduce the error into a
> > runnable example. But after posting this I will keep trying and if I
> > manage I will post that.
> >
> > We migrated this web application from Java 1.7 + Tapestry 5.3.7 to
> > Java
> > 1.8 with Tapestry 5.3.8 .
> >
> > Clicking on the column header of this column - which contains String
> > values - causes the exception below.
> >
> > While I'm investigating this error I was wondering if someone is aware
> > of differences in the grid sorting of Tapestry 5.3.8 that might cause
> > it to throw a null-pointer where Tapestry 5.3.7 wouldn't (and maybe
> > should; it's likely that there is a mistake of mine that was somehow
> > being "forgiven" by 5.3.7).
> >
> > Stacktrace:
> >
> > java.lang.NullPointerException
> > ?
> > org.apache.tapestry5.internal.grid.CollectionGridDataSource$2.compare(
> > CollectionGridDataSource.java:78)
> > ?
> > org.apache.tapestry5.internal.grid.CollectionGridDataSource$3.compare(
> > CollectionGridDataSource.java:91) ?
> > java.util.TimSort.countRunAndMakeAscending(TimSort.java:355)
> > ?  java.util.TimSort.sort(TimSort.java:234)
> > ?  java.util.Arrays.sort(Arrays.java:1512)
> > ?  java.util.ArrayList.sort(ArrayList.java:1454)
> > ?  java.util.Collections.sort(Collections.java:175)
> > ?
> > org.apache.tapestry5.internal.grid.CollectionGridDataSource.prepare(Co
> > llectionGridDataSource.java:97)
> > ?
> > my.package.gui.tapestry.components.AMCGridEmbedded$CachingDataSource.p
> > repare(AMCGridEmbedded.java:853)
> > ?
> > my.package.gui.tapestry.components.AMCGridEmbedded.setupDataSource(AMC
> > GridEmbedded.java:1174)
> > ?
> > my.package.gui.tapestry.components.AMCGridEmbedded.setupRender(AMCGrid
> > Embedded.java:655)
> > ?
> > my.package.gui.tapestry.components.AMCGridEmbedded.advised$setupRender
> > _1a14d3f8fd924(AMCGridEmbedded.java)
> > ?
> > my.package.gui.tapestry.components.AMCGridEmbedded$Invocation_setupRen
> > der_1a14d3f8fd923.proceedToAdvisedMethod(Unknown
> > Source)
> > ?
> >
> org.apache.tapestry5.internal.plastic.AbstractMethodInvocation.proceed(AbstractMethodInvocation.java:84)
> > ?  ....
> > ?  ....
> >
> >
>

Reply via email to