Re: Duplicate objects in db4o with back button
Igor, thanks for your comments so far. After a lot of struggle, I now have the following strategy in place which just provides me with the old results, duplicate data in the database when I add a template, and then press the back button and add it again. Here is an example of how I create a new object in wicket (when I need a transient model). I am trying to understand how wicket gets/sets the objects. Any pointers? public class TemplateAddPage extends AuthPage { public TemplateAddPage() { setModel(new CompoundPropertyModel(new Template())); add(new TemplateAddForm(templateaddform)); } @Override public Role[] getAllowedRoles() { return new Role[] { Role.ADMIN, Role.THERAPIST }; } private class TemplateAddForm extends Form { public TemplateAddForm(String id) { super(id); add(new RequiredTextField(name)); add(new RequiredTextField(version)); add(new RequiredTextField(author)); add(new TextArea(description)); add(new TemplateDropDownChoicePanel(ddcpanel)); } @Override public void onSubmit() { Template template = (Template) getInnermostModel().getObject(); WicketApplication.get().getTemplateFactory().store(template); setResponsePage(new TemplateListPage()); } } } And here is my base IModel class public abstract class BaseWebModelT implements IModel { private static final long serialVersionUID = 1L; protected Long id = null; protected T object = null; public abstract ClassT getBaseClass(); public abstract BaseFactoryT getFactory(); public BaseWebModel(T object) { this.id = getFactory().getID(object); this.object = object; } public T getObject() { if (object == null) { object = getFactory().getById(id); if (object == null) { throw new RuntimeException(Object not found); } } return object; } public void setObject(Object object) { getFactory().store((T) object); } public void detach() { if (object != null) { if (id != null) { id = getFactory().getID(object); object = null; } } } On Thu, Jan 22, 2009 at 7:58 PM, Igor Vaynberg igor.vaynb...@gmail.comwrote: when you click the back button you go to a previous version of the page (a snapshot as it existed when rendered). in that version the id inside the model is still null. -igor On Thu, Jan 22, 2009 at 10:48 AM, pieter claassen pieter.claas...@gmail.com wrote: Thanks for both responses. I can see what I am supposed to do, what I don't understand is what is going wrong. Why when I click on the back button, does the id of my object become invalid? Any pointers in the wicket docs to understand this better? Regards, Pieter BTW Thanks for a great framework. On Thu, Jan 22, 2009 at 5:44 PM, Igor Vaynberg igor.vaynb...@gmail.com wrote: http://wicketinaction.com/2008/09/building-a-smart-entitymodel/ notice the deatch() implementation -igor On Thu, Jan 22, 2009 at 8:05 AM, pieter claassen pie...@claassen.co.uk wrote: I am using wicket 1.3.5 and db4o 7.4.63.11890. My objects are being passed between pages using a subclass of LoadableDetachableModel (see below) My problem is: 1. I edit an object on PageA 2. I use the back button and then re-submit the form I edited and now I have two objects in the database. Any ideas on why this is happening? Cheers, Pieter package com.musmato.wicket.model; import org.apache.wicket.model.LoadableDetachableModel; import com.musmato.dao.BaseFactory; public abstract class BaseWebModelT extends LoadableDetachableModel { private static final long serialVersionUID = 1L; protected Long id; public abstract ClassT getBaseClass(); public abstract BaseFactoryT getFactory(); public BaseWebModel(Long id) { this.id = id; } public BaseWebModel(T object) { this.id = getFactory().getID(object); } @Override protected Object load() { if (id == null) { return getFactory().getNewObject(); } return getFactory().getById(id); } } - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Duplicate objects in db4o with back button
I am using wicket 1.3.5 and db4o 7.4.63.11890. My objects are being passed between pages using a subclass of LoadableDetachableModel (see below) My problem is: 1. I edit an object on PageA 2. I use the back button and then re-submit the form I edited and now I have two objects in the database. Any ideas on why this is happening? Cheers, Pieter package com.musmato.wicket.model; import org.apache.wicket.model.LoadableDetachableModel; import com.musmato.dao.BaseFactory; public abstract class BaseWebModelT extends LoadableDetachableModel { private static final long serialVersionUID = 1L; protected Long id; public abstract ClassT getBaseClass(); public abstract BaseFactoryT getFactory(); public BaseWebModel(Long id) { this.id = id; } public BaseWebModel(T object) { this.id = getFactory().getID(object); } @Override protected Object load() { if (id == null) { return getFactory().getNewObject(); } return getFactory().getById(id); } }
Re: Duplicate objects in db4o with back button
when you save the entity, make sure you update the ID in the LDM to point to the newly created object. Martijn On Thu, Jan 22, 2009 at 5:05 PM, pieter claassen pie...@claassen.co.uk wrote: I am using wicket 1.3.5 and db4o 7.4.63.11890. My objects are being passed between pages using a subclass of LoadableDetachableModel (see below) My problem is: 1. I edit an object on PageA 2. I use the back button and then re-submit the form I edited and now I have two objects in the database. Any ideas on why this is happening? Cheers, Pieter package com.musmato.wicket.model; import org.apache.wicket.model.LoadableDetachableModel; import com.musmato.dao.BaseFactory; public abstract class BaseWebModelT extends LoadableDetachableModel { private static final long serialVersionUID = 1L; protected Long id; public abstract ClassT getBaseClass(); public abstract BaseFactoryT getFactory(); public BaseWebModel(Long id) { this.id = id; } public BaseWebModel(T object) { this.id = getFactory().getID(object); } @Override protected Object load() { if (id == null) { return getFactory().getNewObject(); } return getFactory().getById(id); } } -- Become a Wicket expert, learn from the best: http://wicketinaction.com Apache Wicket 1.3.5 is released Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.3. - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: Duplicate objects in db4o with back button
http://wicketinaction.com/2008/09/building-a-smart-entitymodel/ notice the deatch() implementation -igor On Thu, Jan 22, 2009 at 8:05 AM, pieter claassen pie...@claassen.co.uk wrote: I am using wicket 1.3.5 and db4o 7.4.63.11890. My objects are being passed between pages using a subclass of LoadableDetachableModel (see below) My problem is: 1. I edit an object on PageA 2. I use the back button and then re-submit the form I edited and now I have two objects in the database. Any ideas on why this is happening? Cheers, Pieter package com.musmato.wicket.model; import org.apache.wicket.model.LoadableDetachableModel; import com.musmato.dao.BaseFactory; public abstract class BaseWebModelT extends LoadableDetachableModel { private static final long serialVersionUID = 1L; protected Long id; public abstract ClassT getBaseClass(); public abstract BaseFactoryT getFactory(); public BaseWebModel(Long id) { this.id = id; } public BaseWebModel(T object) { this.id = getFactory().getID(object); } @Override protected Object load() { if (id == null) { return getFactory().getNewObject(); } return getFactory().getById(id); } } - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: Duplicate objects in db4o with back button
Thanks for both responses. I can see what I am supposed to do, what I don't understand is what is going wrong. Why when I click on the back button, does the id of my object become invalid? Any pointers in the wicket docs to understand this better? Regards, Pieter BTW Thanks for a great framework. On Thu, Jan 22, 2009 at 5:44 PM, Igor Vaynberg igor.vaynb...@gmail.comwrote: http://wicketinaction.com/2008/09/building-a-smart-entitymodel/ notice the deatch() implementation -igor On Thu, Jan 22, 2009 at 8:05 AM, pieter claassen pie...@claassen.co.uk wrote: I am using wicket 1.3.5 and db4o 7.4.63.11890. My objects are being passed between pages using a subclass of LoadableDetachableModel (see below) My problem is: 1. I edit an object on PageA 2. I use the back button and then re-submit the form I edited and now I have two objects in the database. Any ideas on why this is happening? Cheers, Pieter package com.musmato.wicket.model; import org.apache.wicket.model.LoadableDetachableModel; import com.musmato.dao.BaseFactory; public abstract class BaseWebModelT extends LoadableDetachableModel { private static final long serialVersionUID = 1L; protected Long id; public abstract ClassT getBaseClass(); public abstract BaseFactoryT getFactory(); public BaseWebModel(Long id) { this.id = id; } public BaseWebModel(T object) { this.id = getFactory().getID(object); } @Override protected Object load() { if (id == null) { return getFactory().getNewObject(); } return getFactory().getById(id); } } - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: Duplicate objects in db4o with back button
when you click the back button you go to a previous version of the page (a snapshot as it existed when rendered). in that version the id inside the model is still null. -igor On Thu, Jan 22, 2009 at 10:48 AM, pieter claassen pieter.claas...@gmail.com wrote: Thanks for both responses. I can see what I am supposed to do, what I don't understand is what is going wrong. Why when I click on the back button, does the id of my object become invalid? Any pointers in the wicket docs to understand this better? Regards, Pieter BTW Thanks for a great framework. On Thu, Jan 22, 2009 at 5:44 PM, Igor Vaynberg igor.vaynb...@gmail.comwrote: http://wicketinaction.com/2008/09/building-a-smart-entitymodel/ notice the deatch() implementation -igor On Thu, Jan 22, 2009 at 8:05 AM, pieter claassen pie...@claassen.co.uk wrote: I am using wicket 1.3.5 and db4o 7.4.63.11890. My objects are being passed between pages using a subclass of LoadableDetachableModel (see below) My problem is: 1. I edit an object on PageA 2. I use the back button and then re-submit the form I edited and now I have two objects in the database. Any ideas on why this is happening? Cheers, Pieter package com.musmato.wicket.model; import org.apache.wicket.model.LoadableDetachableModel; import com.musmato.dao.BaseFactory; public abstract class BaseWebModelT extends LoadableDetachableModel { private static final long serialVersionUID = 1L; protected Long id; public abstract ClassT getBaseClass(); public abstract BaseFactoryT getFactory(); public BaseWebModel(Long id) { this.id = id; } public BaseWebModel(T object) { this.id = getFactory().getID(object); } @Override protected Object load() { if (id == null) { return getFactory().getNewObject(); } return getFactory().getById(id); } } - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org