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