Hi, this is wild guess, but take a look at the environment? You can push, pop and peek objects that are in the environment, shared by all enclosed components.
http://tapestry.apache.org/tapestry5/guide/env.html http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/services/Environment.html - Ville eldred wrote: > > Hi Guys > > No problem, thanks Otho and donf yang for helping a newbie at Tapestry. > Am still trying get my head around how to pass data between components > (not same as pages) ie how to pass data from one component to another. > Let me be more precise: > > If I use the @Component annotation then my second menu component it has > be nested inside first <t:mainMenu><div class="sidemenu"/></t:mainMenu> > there you can pass a string to submenu provided that its enclosed inside > MainMenu component, however would not work if my two menu components sit > independently from each other inside my Layout component. Apologies is I > did not explain myself clearly enough. Here is my Layout.tml code > fragment: > > > ... > > <!--Main menu top--> > <!--header--> > <t:mainmenu myStringParameter="Link1,Link2 Link3..."/> > <div style="clear:both;"/> > <!-- Body --> > <div id="bd"> > <div id="yui-main"> > <div class="yui-b"> > <div id="bd"> > <t:body /> > </div> > </div> > </div> > <div class="yui-b"> > <t:sideMenu/> > </div> > </div> > <!-- end body --> > <div style="clear:both;"></div> > > ... > > When the event hander is called ie onAction(String context) from > MainMenu.java I want to be able to pass that string from the onAction > method (MainMenu.java) to another method called > setSelectedMenuItem(String context) inside SideMenu.java without getting > a NullPointerException. If I use @Component annotation then I need to > nest <t:mainMenu><div class="sidemenu"/></t:mainmenu> then it will work. > But because my sidemenu component sits further down in my Layout.tml > page, how can I do this ? > > Thanks again for the assistance. > > > > -----Original Message----- > From: Otho [mailto:taa...@googlemail.com] > Sent: Friday, June 12, 2009 2:55 PM > To: Tapestry users > Subject: Re: Two Menu Components > > Oops, sorry. My bad. > > This doesn't work with components in this way. > > If you want to update with Ajax I suggest you try donf jangs solution. > The > following works on full page refresh. > > You need to have MainMenu and SideMenu as components in your Layout.java > > Layout.java > > @Component > private MainMenu mainMenu; > > @Component > private SideMenu sideMenu; > > > Object setupRender() > { > > sideMenu.setSelectedMainMenuItem(mainMenu.getSelectedMenuItem()); > > .... > > return null; > } > > > MainMenu.java > > @Persist > private String selectedItem; > > @Property > private List<String> menuItems = Arrays.asList("home", "about", "help"); > > @Property > private String currentMenuItem; > > public String getSelectedMenuItem() > { > return selectedItem; > } > > Object onActionFromMyMenu(String context) > { > selectedItem = context; > > return null; > } > > MainMenu.tml > ... > <ul> > <t:loop source="menuitems" value="currentMenuItem"> > <li> ${message:${currentMenuItem}-label} > </t:loop> > </ul> > > MainMenu.properties > > home-label=Start > about-label=About > help-label=Help > > > SideMenu.java > > @Persist > private String selectedMainMenuItem; > > public getSelectedMainMenuItem() > { > return selectedMainMenuItem; > } > > public setSelectedMainMenuItem(String value) > { > selectedMainMenuItem=value; > } > > The rest with the blocks can stay as it is in the first post. > > If you don't write explicit getters and setters like I did in this > second > example, it won't compile, since the getters and setters are only > created at > runtime by Tapestry when using the @Property annotation. Sorry for being > so > rash. I hope this helps, and as I said if you want Ajax, look at donf > yangs > code. > > > 2009/6/12 Eldred Mullany <eldred.mull...@easypay.co.za> > >> Hi Otho >> >> Thank you for the feedback, I am trying this example, but notice that > I >> get a transformation exception if I inject my component as per your >> example. Complaining about it not having a serviceID ? >> >> Using T5 5.1.0.5 >> >> How do I provide a serviceID to ComponentResourcesInjectionProvider ? >> >> Thank you >> >> -----Original Message----- >> From: Otho [mailto:taa...@googlemail.com] >> Sent: Thursday, June 11, 2009 3:33 PM >> To: Tapestry users >> Subject: Re: Two Menu Components >> >> Create an eventhandler in your MainMenu component which fires on > select >> and >> gives the selected menuitem as context. >> >> For example >> >> class MainMenu >> @Inject >> private SideMenu sideMenu; >> >> Object onActionFromYourMenu(String context) >> { >> sideMenu.setSelectedMainMenuItem(context); >> >> return null; >> } >> >> class SideMenu >> >> @Property >> @Persist >> private String selectedMainMenuItem; >> >> @Inject >> private Block whateverBlock; >> >> @Property >> @Persist >> private Block displayBlock; >> >> Object setupRender() >> { >> if(selectedMainMenuItem.equals("whatever") >> displayBlock = whateverBlock; >> >> ... >> >> return null; >> } >> >> SideMenu.tml >> >> <div class="sidemenu"> >> <t:delegate to="displayBlock"/> >> </div> >> >> <t:block t:id = "whateverBlock"> >> <ul> >> <li>Whatver has to be done</li> >> <ul> >> </t:block> >> >> >> 2009/6/11 Eldred Mullany <eldred.mull...@easypay.co.za> >> >> > Hi All >> > >> > >> > >> > I need some advice on how to get two menu components to talk to each >> > other. The fist component is a top menu with a whole lot of links, >> when >> > an action link is fired(from the first menu component) I want to > pass >> a >> > parameter string to the second component (sub-menu) which will > render >> > based on the parameter it's been passed to it. >> > >> > >> > >> > So in other words second menu component is dependent on the first. >> > >> > >> > >> > Its pretty much high level but some advice would be useful. Perhaps > a >> > component listener of some sort? >> > >> > >> > >> > Any ideas ? >> > >> > >> > >> > Thanks >> > >> > Eldred >> > >> > >> > >> > >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >> For additional commands, e-mail: users-h...@tapestry.apache.org >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > > > -- View this message in context: http://www.nabble.com/Two-Menu-Components-tp23980338p24067890.html Sent from the Tapestry - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org