Use onActivate() onPassivate() in ViewContact Page. As pages are pooled in tapestry, they don't remember what was in them
You may also use @Persist on field contact in ShowAll page regards Taha On Mon, Nov 8, 2010 at 6:22 PM, Josh Kamau <[email protected]> wrote: > I am trying to pass an object from one page (a page with a grid) to another > page (the page with BeanDisplay). > > I know am making a silly mistake somewhere but i have spent 2 hours on it > and i still cant figure out the issue. > > Here is the page with the grid > > <html t:type="layout" t:title="Show all contacts" > xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" > xmlns:p="tapestry:parameter"> > > > <div class="span-6"> > <div t:type="menu"/> > </div> > > <div class="span-16"> > <table t:type="grid" t:source="contacts" t:row="contact" > t:add="Actions"> > <p:actionscell> > <t:actionlink t:id="delete" t:context="contact.id > ">delete</t:actionlink>| > <t:actionlink t:id="view" t:context="contact.id > ">view</t:actionlink> > </p:actionscell> > </table> > </div> > > </html> > > public class ShowAll { > > @Inject > private Dao dao ; > > @Property > private Contact contact ; > > @InjectPage > private ViewContact viewContact ; > > public List<Contact> getContacts(){ > return dao.getAll(); > } > > @OnEvent(value="action", component="delete") > private void deleteContact(Long id){ > dao.delete(id, Contact.class); > } > > @OnEvent(value="action", component="view") > private Object viewContact(Long id){ > Contact contact = dao.getById(id, Contact.class); > viewContact.setContact(contact); > return viewContact ; > } > > } > > > The view page > > <html t:type="layout" t:title="Show all contacts" > xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" > xmlns:p="tapestry:parameter"> > > <div class="span-6"> > <t:menu title="Viewing Contact"/> > </div> > > <div class="span-16"> > <t:beandisplay object="contact"/> > </div> > > </html> > > package com.josh.addressbook.pages; > > import com.josh.addressbook.entities.Contact; > > public class ViewContact { > > > private Contact contact ; > > public Contact getContact() { > return contact; > } > > public void setContact(Contact contact) { > this.contact = contact; > } > > > } > > > Error message > > An unexpected application exception has occurred. > > - org.apache.tapestry5.internal.services.RenderQueueException > Render queue error in SetupRender[ViewContact:beandisplay]: Parameter > 'object' of component ViewContact:beandisplay is bound to null. This > parameter is not allowed to be null. > activeComponents > - ViewContact (class com.josh.addressbook.pages.ViewContact) > - ViewContact:layout (class com.josh.addressbook.components.Layout) > classpath:com/josh/addressbook/pages/ViewContact.tml, line 31<html > t:type="layout" t:title="Show all contacts"2 xmlns:t=" > http://tapestry.apache.org/schema/tapestry_5_1_0.xsd > "3xmlns:p="tapestry:parameter"> > 4 > 5 <div class="span-6">6 <t:menu title="Viewing Contact"/>7 </div>8 > - ViewContact:beandisplay (class > org.apache.tapestry5.corelib.components.BeanDisplay) > classpath:com/josh/addressbook/pages/ViewContact.tml, line 105 <div > class="span-6">6 <t:menu title="Viewing Contact"/>7 </div>8 > 9 <div class="span-16">10 <t:beandisplay object="contact"/>11 </div>12 > 13</html> > locationclasspath:com/josh/addressbook/pages/ViewContact.tml, line 10 > - org.apache.tapestry5.ioc.internal.util.TapestryException > Parameter 'object' of component ViewContact:beandisplay is bound to null. > This parameter is not allowed to be null. > locationclasspath:com/josh/addressbook/pages/ViewContact.tml, line 10Hide > uninteresting stack frames Stack trace > - > org.apache.tapestry5.internal.transform.ParameterWorker$2$1.readFromBinding(ParameterWorker.java:328) > > - > org.apache.tapestry5.internal.transform.ParameterWorker$2$1.get(ParameterWorker.java:413) > > - > org.apache.tapestry5.corelib.components.BeanDisplay._$get_object(BeanDisplay.java) > > - > org.apache.tapestry5.corelib.components.BeanDisplay.setupRender(BeanDisplay.java:128) > > - > org.apache.tapestry5.corelib.components.BeanDisplay$MethodAccess_setupRender_12c2b7e6fa2.invoke(BeanDisplay$MethodAccess_setupRender_12c2b7e6fa2.java) > > - > > > org.apache.tapestry5.internal.transform.RenderPhaseMethodWorker$Invoker.invoke(RenderP >
