whats wrong with passing models around?

-igor

On Mon, Jul 28, 2008 at 5:45 PM, Ricky <[EMAIL PROTECTED]> wrote:
> May be i am reading too much into this, but i thought the idea was that
> Wicket components deal with Wicket models that in turn deal with Customer
> (User / Application) models  (or VO or anything like that).
> Because to me, if we use Application / Non wicket models on components or
> pass them around like that, it just says that we are short circuiting to
> allow for components to directly deal with our application specific models
> instead of Wicket models. Am i incorrect in my understanding?
>
>
>
> On Thu, Jul 24, 2008 at 11:45 AM, Igor Vaynberg <[EMAIL PROTECTED]>wrote:
>
>> sure you can have a constructor with a signature (IModel<Group>,
>> IModel<User>) at runtime it will just look like (IModel,IModel) which
>> is a perfectly good signature.
>>
>> -igor
>>
>> On Thu, Jul 24, 2008 at 4: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]
>> >
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
>
> --
>
> Regards
> Vyas, Anirudh
> || ॐ ||
>

Reply via email to