Also you can control the display blocks using the data-type on the bean model, if you need something special.
-- Chris On Tue, Jun 28, 2016 at 3:30 PM, Chris Poulsen <mailingl...@nesluop.dk> wrote: > 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) >> > ? .... >> > ? .... >> > >> > >> > >