Hey,

so you've got a class CreateUser which is a factory that creates an Edit
Page? The name would be misleading i think. You could have something like
PageFactory<CONTAINER<MODEL>, CONTANER extends MarkupContainer, MODEL
extends IModel<?>> (i kept capture (?) just as an example)  and throw in a
create method in there which is something like : createPage(final MODEL
model) { }.

But I am thinking that Wicket's idea was not to manage the life cycle of
objects to keep it simpler; otherwise its very easy to become Dependency
Injection type container to provide for things like above.

Just a thought, only Igor can verify that info, i could be plain wrong.

Regards,
Rick

On Tue, Jul 29, 2008 at 12:49 AM, Jeremy Thomerson <
[EMAIL PROTECTED]> wrote:

> As far as the constructor problem is concerned, I may not fully understand
> your problem, but what about static factory methods?
>
> CreateUser.createEditPage(IModel<Group>)
> CreateUser.createAddPage(IModel<User>)
>
> --
> Jeremy Thomerson
> http://www.wickettraining.com
>
> On Thu, Jul 24, 2008 at 6:50 AM, John <[EMAIL PROTECTED]> wrote:
>
> > hi Igor,
> >
> > i do have a detachable Group model so am now passing that into my
> > CreateUser page - thank you
> >
> > that is a very interesting point regarding serialization... thank you
> > for mentioning it!  i will have to bear that in mind.
> >
> > as i understand generics, the generic identity is lost at run time so
> > you cannot have two constructors accepting different IModels like
> > IModel<Group> and IModel<User>.  is there an obvious way around this
> > that i have not spotted?  my CreateUser page is also an edit page...
> > as the code is exactly the same i am reusing it... but a create would
> > pass a IModel<Group> but an edit would pass IModel<User>, but it
> > cannot!!!  i have passed in the user id instead, and am loading it
> > manually inside the page even though i already have the User object
> > inside a detachable model when i make the Link to the edit page.  does
> > this sound correct?
> >
> > hi Thomas,
> >
> > those are good rules!  i have written many pages with ids being used
> > in Links, so for easy access to the object inside the model, i have
> > creating final references to the model object at the start of the
> > constructor... and then just calling myobject.getId() where needed.  i
> > am concerned that this might break your second rule, as the object
> > inside the model may not be the same i think?
> >
> > i have read that for example new Label(myObject.getName()) is bad
> > because the Label will be fixed as the name when the page was first
> > constructed, but it will not change if the name changes but the page
> > is redisplayed.  however i have a gap in my understanding regrding
> > redisplay of the page...
> >
> > when does a page get redisplayed?  a page that displays a School
> > information can not be re used for a different School i think as the
> > IModel<School> or School id will be passed to the page constructor.
> > so it will only be displayed for the one School...  does that mean
> > that the School object that is inside the model on the page will
> > always be the same or will that object change when the model is
> > detached and reattached?  so my final reference to the School object
> > is a bad bad thing?
> >
> > also... when you view a different School does the first page still
> > exist?  i can see the first page can not be reused if i click a link
> > to view the first School that is passing a IModel<School> into the
> > constructor, but if I pass the School id number via a PageParameters
> > will Wicket reuse a page if the PageParameters match?
> >
> > john...
> >
> >
> >
> > On Tue, Jul 22, 2008 at 9:41 AM, Thomas Mäder <[EMAIL PROTECTED]>
> > wrote:
> > > I have three rules for directly referencing objects from pages
> > >
> > > 1) It's serializable
> > > 2) The valueis not going to change from the time I construct the page
> > > to when I use the object
> > > 3) It doesn't matter if I get a copy of the object (because of
> > deserialization).
> > >
> > > 2 & 3 can be summarized as the object being a value object
> > >
> > > Thomas
> > >
> > >
> > > On Mon, Jul 21, 2008 at 6:25 PM, Igor Vaynberg <
> [EMAIL PROTECTED]>
> > wrote:
> > >> the easiest thing to do is to pass the imodel<group> into the second
> > >> page. i assume you already have a detachable group model that you are
> > >> using to list users, so just pass it to the next page.
> > >>
> > >> in general keeping references to objects is safe for as long as the
> > >> objects them selves are valid. the problem with hibernate objects is
> > >> that although you have a reference that you can keep forever, the
> > >> object's lifecycle is not tied to that reference. the object is tied
> > >> to the session whose scope is usually a request, so the object itself
> > >> is only valid during the request, which is why you have to use
> > >> loadable detachable models.
> > >>
> > >> if you had an object that is not tied to any kind of lifecycle you
> > >> could keep a reference indefinetely.
> > >>
> > >> once you start talking about objects that live across pages you run
> > >> into another issue. wicket serializes each page individually. that
> > >> means if you pass a reference to an object from page A to page B, page
> > >> B will end up with a clone and change made to that object inside page
> > >> B will not be visible to page A. something to keep in mind. this is
> > >> not a problem for multiple references to an object within a page
> > >> because serialization will properly keep track of multiple references
> > >> to the same object.
> > >>
> > >> clears things up?
> > >>
> > >> -igor
> > >>
> > >> On Mon, Jul 21, 2008 at 9:10 AM, John <[EMAIL PROTECTED]> wrote:
> > >>> hi, i am writing an application, but don't know how best to write it
> > >>> in wicket.  i can see lots of different ways to approach my problem
> > >>> and would appreciate some direction as to which approach is the most
> > >>> appropiate.  i have read the documentation in the wiki regarding
> > >>> models and understand the different page constructors but i am
> > >>> confused about how long the objects are safe to hold on to and which
> > >>> approach is best.
> > >>>
> > >>> here is some (pseudo)code for a page i need to write.  my situation
> is
> > >>> i have one page which shows the details about a "Group" (collection
> of
> > >>> users), which has a link on it to create a new "User" and add it to
> > >>> the Group.  (the CreateUser page has text boxes to set name ect and
> > >>> saves to the database on submit)  my ViewGroupDetails page:
> > >>>
> > >>> // first decision = set the Group as a final variable before creating
> > >>> the link so it is still there in the onClick?
> > >>> final Group g = (Group)getModelObject();
> > >>> new Link("adduser") {
> > >>>  public void onclick() {
> > >>>    // or get Group from the page's model only when link clicked?
> > >>>    Group g = (Group)ViewGroup.this.getModelObject();
> > >>>    // second decision = pass the whole Group into the new page
> > constructor?
> > >>>    setResponsePage(new CreateUser(g));
> > >>>    // or make the new User object here and pass it in?
> > >>>    User u = new User();
> > >>>    u.setGroup(g);
> > >>>    setResponsePage(new CreateUser(u));
> > >>>    // or pass in just the group id number?
> > >>>    setResponsePage(new CreateUser(g.getId()));
> > >>>  }
> > >>> }
> > >>>
> > >>> so the constructor of my CreateUser page will either take a Group and
> > >>> will create the User (as above), or take a Group's id number and load
> > >>> the Group from the database first, or take a User directly.  an id
> > >>> number could be passed in by PageParameters or directly as an
> integer.
> > >>>  an object could be passed bare or put inside a Model.  i am not sure
> > >>> i am making any sense!  i suppose my questions are...
> > >>>
> > >>> - how 'safe' is it to pass the Group directly to the new page
> > constructor?
> > >>>
> > >>> - is it safe to create a final reference to an object and rely on
> that
> > >>> object being still there and intact by the time the link is clicked?
> > >>>
> > >>> - is it safe to getModelObject() to get the page's object at any time
> > >>> in the future?
> > >>>
> > >>> - i understand that the following is bad: new Label(group.getId())...
> > >>> better to use a model and load the id when needed... am i falling
> into
> > >>> the same trap with the final variables in the code above?
> > >>>
> > >>> john
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>

Reply via email to