I don't think the list: prefix is part of Tapestry itself, but of a third-party module. Anyway, any context not dead simple is better served by being done in Java instead of the template. That's the Tapestry philosophy.
On Wed, Oct 3, 2018 at 4:17 PM Ross, Cyndy <cyndy.r...@reged.com> wrote: > > try > <t:eventlink t:event="changeRelation" t:async="true" > t:context="list:account.get('test').userUuid, friend"> Change Relation > </t:eventlink> > > square brackets doesn't work for me either. not sure why list: is not > documented. > > cheers, > Cyndy > ________________________________________ > From: D. R. [d.re...@googlemail.com.INVALID] > Sent: Tuesday, October 02, 2018 10:48 AM > To: users@tapestry.apache.org > Subject: eventlink with multiple context parameters > > Hi @all, > > I am confused about calling a java method with an eventlink and multiple > context parameters: > t:context="[account.get('test').userUuid, friend]" does not work, see > below please. > > Following stuff is in my Java class: > > @Property(write = false) > private final String friend = "friend"; > public AbstractMap<String, UserAccount> getAccount() { > UserAccount userAcc = userAccounts.get(loopContactIndex); > AbstractMap<String, UserAccount> test = new HashMap<String, > UserAccount>(); > test.put("test", userAcc); > return test; > } > > void onChangeRelation(final String uuid, final String relation) { > // no chance to come inside here... > } > > > void onForget(final String uuid) { > // everything ok here... > } > > It is no problem to call "onForget" with this eventlink: > <t:eventlink t:event="forget" t:async="true" > t:context="account.get('test').userUuid"> Forget </t:eventlink> > > But if I try to call an eventlink like: > <t:eventlink t:event="changeRelation" t:async="true" > t:context="[account.get('test').userUuid, friend]"> Change Relation > </t:eventlink> > > then I get following exception: > > Exception assembling root component of page profile/User: Exception > assembling embedded component 'usercontactlist' (of type > com.myapp.t5.components.profile.UserContactList, within profile/User): > Could not convert '[account.get('test').userUuid, friend]' into a > component parameter binding: Exception generating conduit for expression > '[account.get('test').userUuid, friend]': Class java.lang.Object does > not contain a property (or public field) named 'userUuid'. > > Now I tried this eventlink: > <t:eventlink t:event="changeRelation" t:async="true" > t:context="[${account.get('test').userUuid}, friend]"> Change Relation > </t:eventlink> > And the page loads successful. > > But a click on this eventlink, calls the wrong method with only one > parameter which is converted to java.lang.String: > > void onChangeRelation(final Object param) { > System.out.println(param.getClass().getName() + ": " + param); > } > > Console --> java.lang.String: [018260e7-844c-44a5-aefc-12faa80de42c, > friend] > > means t:context="[${account.get('test').userUuid}, friend]" is > interpreted as a String. > > if I remove the Map and return UserAccount directly in "getAccount()" > the code works great: > <t:eventlink t:event="changeRelation" t:async="true" > t:context="[account.userUuid, friend]"> Change Relation </t:eventlink> > > Furthermore I tried to replace the AbstractMap with Optional class: > <t:eventlink t:event="changeRelation" t:async="true" > t:context="[account.get().userUuid, friend]"> Change Relation > </t:eventlink> > > With this I get the same exception: > > Exception assembling root component of page profile/User: Exception > assembling embedded component 'usercontactlist' (of type > com.myapp.t5.components.profile.UserContactList, within profile/User): > Could not convert '[account.get().userUuid, friend]' into a component > parameter binding: Exception generating conduit for expression > '[account.get().userUuid, friend]': Class java.lang.Object does not > contain a property (or public field) named 'userUuid'. > > Why the second level is treated as Object, if i want to get a value in > the third level? > (i know, we could solve that by providing another getter in the java > class, but this violates "code less, deliver more" :-) > Why does this occur only in case of an eventlink with multiple parameters? > What i am doing wrong? > > Thanks for help! > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > > > > --------------------------------------------------------------------------------------- > This email has been scanned for email related threats and delivered > safely by Mimecast. > For more information please visit http://www.mimecast.com > > --------------------------------------------------------------------------------------- > -- Thiago