Well, that of course worked - as I wrote earlier I'm very grateful. Thank you very much for your help once again.
igor.vaynberg wrote: > > final Room r = (Room) m.getObject(); > item.add(new TextField("costPerNight", > new PropertyModel(r, > "costPerNight"))); > > there you are binding your model directly to the object thus keeping a > reference, instead > new propertymodel(m, "costPerNight"); > > -igor > > On Sun, Nov 30, 2008 at 3:51 PM, blekit <[EMAIL PROTECTED]> wrote: >> >> Hello, >> >> thanks for link to the article - it was very interesting. However, I >> still >> don't see clear connection between this case and my problem - I use my >> own >> DomainObjectModel which extends LoadableDetachableModel (and after >> reading >> once more the section about them i still can't see any mistakes in mine >> usage of them - maybe i need some sleep after all). >> >> I think i noticed where the problem lies, but still I don't have any clue >> how to fix it. The hotel's data including rooms list are loaded correctly >> and rendered on the first time. But when i submit the form, only hotel's >> direct data (name, address, etc.) are updated. I discovered, that the >> list >> of rooms i use as a model for my PageableListView is probably detached >> immidiately after render and the changes made on her aren't propagated to >> hotel when i persist it. Still, as I said before, I don't know why it >> happens and I'd be very grateful for some more explicite answer. >> >> Thanks in advance. >> Best regards, >> Michał Olejnik >> >> PS. If you need some more code to help me let me know and i'll paste it >> >> igor.vaynberg wrote: >>> >>> go to wicketinaction.com and search for "smart entity model" >>> >>> also read the wiki page called models, especially detachable models >>> secton. >>> >>> -igor >>> >>> On Sun, Nov 30, 2008 at 2:40 PM, blekit <[EMAIL PROTECTED]> wrote: >>>> >>>> Hello, >>>> >>>> I'm writing an web application using Spring, Wicket and Hibernate. It's >>>> the >>>> first time I use this technologies, so forgive me if my question is >>>> trivial. >>>> >>>> In my application i have a many to one relationship between Hotel and >>>> Room. >>>> On admin panel I'd like to have possibility to edit Hotel data - >>>> including >>>> modifying data of rooms that belong to this hotel. Unfortunately, when >>>> i >>>> try >>>> to save modified hotel, only it's data are changed - rooms stay they >>>> were >>>> before modification. And when i try to delete a room, i get an >>>> exception >>>> that says i try to delete detached entity >>>> (java.lang.IllegalArgumentException: Removing a detached instance >>>> pl.molejnik.hotbookings.model.Room#1). >>>> >>>> I've spent whole day looking for solutions for this, but I failed... >>>> I'd >>>> be >>>> very grateful if anyone could tell me what i am doing wrong. >>>> >>>> Here are relevant fragments of my code: >>>> >>>> Room.java: >>>> >>>> @ManyToOne(targetEntity = Hotel.class) >>>> @JoinColumn(name = "Hotel_id") >>>> private Hotel hotel; >>>> >>>> Hotel.java >>>> >>>> @OneToMany(mappedBy = "hotel", cascade = { CascadeType.PERSIST, >>>> CascadeType.MERGE, CascadeType.REMOVE }) >>>> private List<Room> rooms; >>>> >>>> DomainObjectModel >>>> >>>> public class DomainObjectModel<T extends DomainObject> extends >>>> LoadableDetachableModel >>>> { >>>> >>>> @SpringBean >>>> private IHotelbookingsService service; >>>> >>>> private final Class<T> type; >>>> >>>> private final Long id; >>>> >>>> public DomainObjectModel(Class<T> type, Long id) { >>>> InjectorHolder.getInjector().inject(this); >>>> this.type = type; >>>> this.id = id; >>>> } >>>> >>>> @SuppressWarnings("unchecked") >>>> public DomainObjectModel(T domainObject) >>>> { >>>> super(domainObject); >>>> InjectorHolder.getInjector().inject(this); >>>> this.type = (Class<T>) domainObject.getClass(); >>>> this.id = domainObject.getId(); >>>> } >>>> >>>> @Override >>>> protected Object load() { >>>> return service.load(type, id); >>>> } >>>> >>>> } >>>> >>>> EditHotelPanel.java >>>> >>>> public class EditHotelPanel extends Panel >>>> { >>>> >>>> private IModel model; >>>> >>>> private Form form; >>>> >>>> PageableListView rooms; >>>> >>>> @SpringBean >>>> IHotelbookingsService service; >>>> >>>> public EditHotelPanel(String id, Long hotelId) { >>>> super(id); >>>> this.setOutputMarkupId(true); >>>> model = new CompoundPropertyModel(new >>>> DomainObjectModel<Hotel>(Hotel.class, >>>> hotelId)); >>>> setModel(model); >>>> form = new Form("form"); >>>> form.setOutputMarkupId(true); >>>> form.add(new TextField("name")); >>>> form.add(new TextField("numberOfStars")); >>>> form.add(new TextField("address.city")); >>>> >>>> rooms = new PageableListView("rooms", >>>> ((Hotel)model.getObject()).getRooms(), 10) { >>>> >>>> >>>> @Override >>>> protected void populateItem(ListItem item) { >>>> DomainObjectModel<Room> m = new >>>> DomainObjectModel<Room>((Room) >>>> item.getModelObject()); >>>> final Room r = (Room) m.getObject(); >>>> item.add(new TextField("costPerNight", >>>> new >>>> PropertyModel(r, >>>> "costPerNight"))); >>>> item.add(new TextField("numberOfBeds", >>>> new >>>> PropertyModel(r, >>>> "numberOfBeds"))); >>>> item.add(new CheckBox("ensuite", >>>> new PropertyModel(r, >>>> "ensuite"))); >>>> item.add(new Link("deleteRoom"){ >>>> >>>> @Override >>>> public void onClick() { >>>> service.removeRoom(r); >>>> } >>>> >>>> }); >>>> } >>>> }; >>>> form.add(rooms); >>>> >>>> SubmitLink save = new SubmitLink("saveButton") { >>>> >>>> @Override >>>> public void onSubmit() { >>>> Hotel h = (Hotel)model.getObject(); >>>> service.saveHotel(h); >>>> setResponsePage(Index.class); >>>> } >>>> >>>> }; >>>> form.add(save); >>>> add(form); >>>> } >>>> >>>> } >>>> >>>> EditHotelPanel.html >>>> >>>> <html xmlns:wicket> >>>> <body> >>>> <wicket:panel> >>>> <form wicket:id="form"> >>>> Nazwa: <input type="text" wicket:id="name"/> >>>> <br/> >>>> Liczba gwiazdek: <input type="text" >>>> wicket:id="numberOfStars"/> >>>> <br/> >>>> Miasto: <input type="text" wicket:id="address.city"/> >>>> <br/> >>>> <div> >>>> Pokoje: >>>> <br/> >>>> <div> >>>> Liczba miejsc >>>> Cena >>>> Lazienka >>>> </div> >>>> <div wicket:id="rooms"> >>>> <input type="text" wicket:id="numberOfBeds"/> >>>> <input type="text" >>>> wicket:id="costPerNight"/> >>>> <input type="checkbox" >>>> wicket:id="ensuite"/> >>>> # Usuń >>>> </div> >>>> </div> >>>> <input type="submit" value="Zapisz" >>>> wicket:id="saveButton"/> >>>> </form> >>>> </wicket:panel> >>>> </body> >>>> </html> >>>> >>>> Best regards, >>>> Michał Olejnik >>>> >>>> >>>> -- >>>> View this message in context: >>>> http://www.nabble.com/Problem-with-detaching-elements-tp20763305p20763305.html >>>> Sent from the Wicket - User mailing list archive at Nabble.com. >>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>> >>>> >>> >>> >> >> -- >> View this message in context: >> http://www.nabble.com/Problem-with-detaching-elements-tp20763305p20763953.html >> Sent from the Wicket - User mailing list archive at Nabble.com. >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> > > -- View this message in context: http://www.nabble.com/Problem-with-detaching-elements-tp20763305p20764142.html Sent from the Wicket - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]