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

Reply via email to