It could be that the "listener:" binding works on pages only. What happens when you specify "ognl:listeners.editClient" instead?
On 4/12/06, matt wear <[EMAIL PROTECTED]> wrote: > > Thanks for the replies Peter. I tried adding the class attribute to my > component spec, but I still have the same problem. Tapestry still wants > to call the listener of the page containing they border. > > Peter Svensson wrote: > > No, you're right. I was confused. Now I do think I know why it doesn't > work > > though. > > > > In your jwc file, you have specified the class which implements your > > component, and is the place to go look for methods, etc. > > > > <component-specification class="... > > > > When you define a sub-component, like this; > > > > <component id="editClient" type="DirectLink"> > > <binding name="listener" value="listener:editClient"/> > > </component> > > > > Tapestry will look for the editClient() or editClient(IRequestCycle > cycle) > > (I think) in the class specified. > > > > what I do when I want dynamic listeners, or what you could call them, is > to > > let the listener be a parameter to my component, like; > > > > <parameter name="callback"/> > > > > and then in the component class have > > > > public abstract IActionListener getCallback(); > > public abstract void setCallback(IActionListener l); > > > > And then I use this somwhere in the class like; > > > > IActionListener c = getCallback(); > > c.actionTriggered(this, cycle); > > > > Or maybe as an parameter to something else, like you have in your > component; > > > > <binding name="listener" value="callback"/> > > > > > > Cheers, > > PS > > > > On 4/12/06, matt wear <[EMAIL PROTECTED]> wrote: > > > >> Are you referring to the code for the listener? If so, I really have > no > >> idea if it actually works, the listener never gets called. For some > >> reason tapestry tries to invoke the editClient listener of whatever > page > >> the Border component is contained on, which it doesn't have. I would > >> like for the editClient listener of the Border component to be called. > >> Thanks for taking a look though. > >> > >> - matt > >> > >> Peter Svensson wrote: > >> > >>> Hmm. I'm no expert, but couldn't it be that you try to use your Border > >>> component as if it were a page? > >>> Remember that a page can contain several components, which in turn can > >>> contain components, but when you call the getPage() method in the > >>> > >> component > >> > >>> it actually correctly returns a reference to the current page, > whichever > >>> > >> one > >> > >>> you have for the moment. > >>> > >>> Cheers, > >>> PS > >>> > >>> On 4/12/06, matt wear <[EMAIL PROTECTED]> wrote: > >>> > >>> > >>>> I have a Border component that has a menu composed of direct > >>>> > >> links. For > >> > >>>> some reason, tapestry is looking for the listeners of these links in > >>>> > >> the > >> > >>>> .java file of the page that the border is contained in, and not the > >>>> Border object its self. Here is a very simple example of what I am > >>>> saying. > >>>> > >>>> Border.jwc > >>>> <component-specification allow-informal-parameters="no"> > >>>> <parameter name="id"/> > >>>> <parameter name="title"/> > >>>> <parameter name="level"/> > >>>> <component id="editClient" type="DirectLink"> > >>>> <binding name="listener" value="listener:editClient"/> > >>>> </component> > >>>> </component-specification> > >>>> > >>>> Border.html > >>>> <html> > >>>> <head> > >>>> <meta http-equiv="Content-Type" content="text/html; > >>>> > >> charset=ISO-8859-1"> > >> > >>>> <link href="./css/be.css" type="text/css" rel="stylesheet" /> > >>>> <title><span jwcid="@Insert" value="ognl:title">title</span></title> > >>>> </head> > >>>> <body jwcid="@Body"> > >>>> <div id="content"> > >>>> <span jwcid="@RenderBody">Page Content</span> > >>>> </div> > >>>> <div id="menu"> > >>>> <span jwcid="@If" condition="level == 'client'"> > >>>> <ul> > >>>> <li><a jwcid="editClient">Edit Client</a></li> > >>>> </ul> > >>>> </span>< > >>>> </div> > >>>> </body> > >>>> </html> > >>>> > >>>> Border.java > >>>> public abstract class Border extends BaseComponent > >>>> { > >>>> @InjectPage("ClientForm") > >>>> public abstract ClientForm getClientForm(); > >>>> > >>>> public IPage editClient() > >>>> { > >>>> ClientForm clientForm = getClientForm(); > >>>> clientForm.setClientId((Integer) > >>>> PropertyUtils.read(getPage(),"clientId")); > >>>> > >>>> return clientForm; > >>>> } > >>>> } > >>>> > >>>> Now, say for a example I include the Border component on a page > >>>> ClientHome. I get an error saying that ClientHome does not implement > a > >>>> listener editClient, when I really want the editClient listener of > the > >>>> Border component to be called. > >>>> > >>>> I looked at the virtual library example because the same thing is > being > >>>> done with the Border component there, however, I can not see what > I've > >>>> done wrong. Why isn't the listener editClient of the Border > component > >>>> being called? Thanks in advance for any help. > >>>> > >>>> - Matt Wear > >>>> > >>>> --------------------------------------------------------------------- > >>>> To unsubscribe, e-mail: [EMAIL PROTECTED] > >>>> For additional commands, e-mail: > [EMAIL PROTECTED] > >>>> > >>>> > >>>> > >>>> > >>> > ------------------------------------------------------------------------ > >>> > >>> No virus found in this incoming message. > >>> Checked by AVG Free Edition. > >>> Version: 7.1.385 / Virus Database: 268.4.1/309 - Release Date: > 4/11/2006 > >>> > >>> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: [EMAIL PROTECTED] > >> For additional commands, e-mail: [EMAIL PROTECTED] > >> > >> > >> > > > > > > ------------------------------------------------------------------------ > > > > No virus found in this incoming message. > > Checked by AVG Free Edition. > > Version: 7.1.385 / Virus Database: 268.4.1/309 - Release Date: 4/11/2006 > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- Jesse Kuhnert Tacos/Tapestry, team member/developer Open source based consulting work centered around dojo/tapestry/tacos/hivemind. http://opennotion.com