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
>

Reply via email to