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]

Reply via email to