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]
>
>

Reply via email to