Hi Ean, Below is the modification of the example you have given as per what I propose.
Groovy: def user = dispatcher.runSync("getSpecialUser", []) context.userDetails = { user }; FTL: <table> <#if(userDetails != null)> <tr> <td> <span class="firstname">$user.firstName</span> <span class="lastname">$user.lastName</span> </td> </tr> <else> <tr> <td> <span class="notperson">User doesn't exists</span> </td> </tr> <#if> </table> - Abdullah On Wed, Dec 23, 2009 at 2:24 AM, Ean Schuessler <e...@brainfood.com> wrote: > Abdullah Shaikh wrote: > >> "If your groovy compile some information, do findList, getRelated ... , if >> you deploy for a customer a screen that don't use all information, you >> generate unnecessary work to your database." >> >> But in groovy you will need to get only that data from database which will >> be required for the FTL page >> >> It's like if an existing FTL gets "xyz" data from database, using this >> approach it will be like, groovy get "xyz" data from the database and >> putting it inside the context, FTL will get this data from the context. >> > If you use closures then the calls will only occur when they are used... > > Groovy: > > context.userDetails = { > def user = dispatcher.runSync("getSpecialUser", []) > if (user.entityName == "Person") return """ > <tr> > <td> > <span class="firstname">$user.firstName</span> > <span class="lastname">$user.lastName</span> > is definitely a person. > </td> > </tr> > """ else return """ > <tr> > <td> > <span class="notperson">User is not a person.</span> > </td> > </tr> > """ > } > > FTL: > > <table> > $userDetails.call() > </table> > > This way the work of generating the user details is never done unless the > FTL pulls them in. This approach is useful for all kinds of formatting > chores. >