On Jan 14, 2008 8:21 AM, Bret Gregory <[EMAIL PROTECTED]> wrote: > I think I should provide some of the code since I will trying to achieve > that you suggested. The menu has the list of MenuItems provided in the > code. But when it renders I want the component to use the correct > component based on its type. I saw another message in the forum that > outputted apples/orange components in this way. > > Menu Class: > > @Component > private PageMenuLink _pageMenuLink; > > @Component > private ActionMenuLink _actionMenuLink; > > private List<AbstractMenuItem> _menuItems; > > private AbstractMenuItem _item; > > @SetupRender > private void initialize() { > _menuItems = new ArrayList<AbstractMenuItem>(); > PageMenuLink item = new PageMenuLink(); > item.setDisplayName("PageMenuLink"); > item.setPage("start");
There's your problem. I'm surprised that even works, you should be getting a runtime instantiation error. PageMenuLink is a component, and Tapestry needs to be the one that instantiates it. That's how Tapestry rendevous your component class with its component resources and a lot of other stuff besides. Putting them inside a list is ok, but you can't instantiate them yourself. Tapestry could probably identify where you are doing this, and raise an exception that says "don't do that". > _menuItems.add(item); > } > > Menu Template: > > <t:loop source="menuItems" value="item"> > <t:delegate to="item"/> > </t:loop> > > <t:Block> > <t:common.nav.pageMenuLink t:id="pageMenuLink"/> > <t:common.nav.actionMenuLink t:id="actionMenuLink"/> > </t:Block> > > Menu Item: > PageMenuLink extends AbstractMenuItem > > > > > -----Original Message----- > From: Howard Lewis Ship [mailto:[EMAIL PROTECTED] > Sent: Monday, January 14, 2008 11:01 AM > To: Tapestry users > Subject: Re: _$resources.queueRender($2); > > You mentioned "provided dynamically"? > > You can't just instantiate components, only Tapestry can do that, once > it has transformed the class. What you can do is place the > components, > in the template, inside a <t:block> element. > > On Jan 14, 2008 7:42 AM, Bret Gregory <[EMAIL PROTECTED]> wrote: > > I am running into a problem with a custom component that I am > attempting > > to write. The component is a dropdown menu. Inside the menu there > are > > menu items which are components that are provided dynamically. These > > components are then looped over and each menu item component is to be > > rendered based on its type. However, I am getting a Null Pointer when > > attempting to render the individual items. It looks like the > > transformation of the components adds a render() method to the > component > > that defers to the ComponentResources class's queueRender method. But > > for my Menu Items the resources is null and I am not sure why that is > > the case. > > > > The MenuItem component class extends an Abstract class from the > > root.base package. This class also looked to be getting transformed > by > > tapestry which I didn't expect since it wasn't in the pages or > > components package. The concrete MenuItem component lives in the > > root.components.nav package. > > > > Any ideas on why the ComponentResources are not available in my Menu > > Item components? > > > > > > -- > Howard M. Lewis Ship > > Creator Apache Tapestry and Apache HiveMind > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- Howard M. Lewis Ship Creator Apache Tapestry and Apache HiveMind --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]