if account doesnt have these setters then how do you expect the form
to mutate the object?
-igor
On Jan 25, 2008 3:03 PM, infodoc <[EMAIL PROTECTED]> wrote:
>
> [offline conversation returned to thread]
>
> Igor,
>
> I understand about using the AccountBean. That is not where the problem
> lies.
>
> Problem: how to update encapsulated field(s) of the Account object from the
> AccountBean??? See details below. Account does NOT have set methods for
> these fields, so I cannot simply copy properties from the bean to the
> newly-created object. That is the difficulty.
>
> Thanks,
>
> RDC
>
>
>
> i dont see why you have to give up encapsulation of anything...
>
> the bean you create does not extend account, in fact it extends
> nothing, just implements serializable. you only need this bean when
> you are creating a new instance of account.
>
> then in onsubmit() you do
>
> onsubmit() {
> AccountBean bean=getModelObject();
> Account acc=new Account(bean.getEmail());
> // copy other properties from bean to acc
>
> dao.save(acc);
> // ^ at this point you should have the id set by hibernate
> setModel(new HibernateEntityModel(acc));
> // ^ notice we set a new model, from now on this form will operate
> on the instance of Account object
> }
>
>
> -igor
>
>
>
> On Jan 24, 2008 6:42 PM, RDC <[EMAIL PROTECTED]> wrote:
> > Igor,
> >
> > Thanks again for your time.
> >
> > Here's the difficulty I am having with implementing the bean idea.
> >
> > Account is a subclass of another class, let's call it Persistable.
> > Persistable has a
> private rowId field which represents the id of the object in a relational
> db. That class
> implements a public getRowId() method, but NOT a setRowId method. This is
> the design
> recommended by Hiberate, which I am using as my ORM. Hibernates sets the
> rowId field
> directly reflexively, using a value provided by the db.
> >
> > Let's say the Form has an AccountBean as its model object. That bean gets
> > updated by
> the FormComponents without problem. It also gets saved to the db, and
> Hibernate sets its
> rowId field. So far, so good.
> >
> > The problem: how to set the rowId of the newly-created Account object from
> > the
> AccountBean, while at the same time keeping respecting the encapsulation of
> rowId????
> Only two choices I see are:
> >
> > 1. create a protected setRowID() method in Persistable (Persistable and
> > Account are
> in different packages); or
> > 2. set the rowId field reflexively.
> >
> > As in all good software engineering, both have pluses and minuses and
> > involve
> tradeoffs. I am really hesitant to give up the safety of the strong
> encapsulation of the
> rowId field. Plus, there are other fields with similar limitation. This
> prompted me to
> try to find a different solution.
> >
> > Would love your thoughts on this. Like everyone, my knowledge of java is
> > incomplete.
> Do you see any other options?
> >
>
> > RDC
>
>
>
> > > Although I believe your solution is the best because of its simplicity,
> > due to
> other (non-wicket) constraints in my design (encapsulation of fields of an
> Account
> superclass), I was unable to use a bean or subclass the form.
> >
> > not really sure why this is an issue for you. give
> > class Account { private String email,name; public Account(String
> > email) { ... } ... }
> >
> > you can always do
> >
> > class AccountBean { private String email,name;}
> >
> > set instance of AccountBean as the model object of the form and then
> > in onsubmit() { AccountBean bean=getModelObject(); Account account=new
> > Account(bean.getEmail()); account.setName(bean.getName());
> > form.setModelObject(account); }
> >
> > you dont break any encapsulation...
> >
> >
> > cheers,
> > -igor
>
>
> and it is also more elegant to e.g. create a copy constructor or
> utility object for copying so that you don't have your submit method
> littered with code to copy properties. That's largely a matter of
> taste though.
>
> --
> View this message in context:
> http://www.nabble.com/create-new-model-object-of-a-Form-from-one-of-its-FormComp-values---tp14983110p15098864.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]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]