It would be great of you had some code to share, it makes it easier to
follow... :)

/Mats

On 5/31/07, ChuckDeal <[EMAIL PROTECTED]> wrote:
>
> I had the same (at least it sounds similar) problem.  My pages use a
> role-based authorization strategy.  Sometimes the role is based upon the
> data on the page.  A good example of this is Responsible Individual (RI);
> if you are not an RI, you have read-only access, but as soon as you are
> added to the RI List, you get read-write access to certain fields (maybe not
> all fields).  In an effort to avoid page flashing, we use AJAX to refresh
> the components whose access are based upon the RI field.
>
> At first the solution was specific to this scenario, then I realized that I
> could have any number of fields on the page that worked in concert with each
> other to either RENDER or ENABLE other fields based upon roles.  In the end,
> I created an abstract methodology based on the concept of of Listeners.  So,
> a field registers itself with another component as a listener, then the
> source component has the responsibility of telling the target components
> what to do and when to do it (in this case, repaint targets when source is
> updated).
>
> The rough idea:  I use the Component MetaData on the source to store a List
> of target Component references.  The whole design is based upon
> MetaDataRoleAuthorizationStrategy.  Now, I know what you're thinking:  What
> about the case where the source component hasn't been instantiated yet, but
> I want to register a target against it?  Well, I use the Page (actually an
> object on the Page) and a custom Panel (that all other panels extend from)
> as mediators.  A Component can actually register with another Component via
> an actual reference to the source Component or by "name".  In the latter
> case, the source Component would have to register themselves with the
> Page/Panel in a Component registry.  This helped with the problem of
> fragility because I didn't need to know the full path to a Component from
> the targets position which meant I could change the hierarchy without having
> to go back and adjust all these register() methods.  That covers the basics
> of building the web of source/targets.
>
> Using the knowledge is up to the developer.  For my immediate needs,
> whenever I repaint the source (which is usually due to an AJAX update of the
> model), I repaint anyone registered to me.  I even created behaviors that
> extend AjaxFormComponentUpdatingBehavior to help make this even more
> transparent.
>
> I just reread this post and it seems a little abstract.  If anyone is
> actually interested in this, I will do my best to elaborate.  I also welcome
> criticism of this approach because I would hate to get into full production
> mode and find some stupid loophole that takes me "back to the drawing
> board".
>
> Chuck
>
>
> James McLaughlin-3 wrote:
> >
> > +1. It can be tedious sometimes  figuring out  how to update
> > components that are on the other side of the tree from the onClick.
> >
> > best,
> > jim
> >
> > On 5/30/07, Jonathan Locke <[EMAIL PROTECTED]> wrote:
> >>
> >>
> >> Maybe another way to auto-ajax-update a component would be to have it do
> >> that whenever its model changes.  There are a lot of caveats with model
> >> change notifications, but that seems to be a pretty clean idea if the
> >> rules
> >> for model changes were respected.  Might make a good RFE for next Wicket
> >> version.
> >>
> >>
> >> Jonathan Locke wrote:
> >> >
> >> >
> >> > It shouldn't be hard to write the method you're talking about.  To find
> >> > all the components using the same model as a given component, just walk
> >> > the component hierarchy using visitChildren() and add any component
> >> which
> >> > returns true for sameInnermostModel(component).
> >> >
> >> > There is a more general case of this problem though where one area of a
> >> > web page may need to be updated because some completely unrelated area
> >> > changed.  This I'm handling by hand right now, but I was asking a day
> >> or
> >> > two ago if there was a way to add a component to every ajax request
> >> (Eelco
> >> > answered that you can do this by implementing a request processor, I
> >> > think).  It seems to be pretty common in an AJAX request to want a
> >> global
> >> > feedback component to update.  Maybe we could have a poor-man's version
> >> of
> >> > this where if you override some boolean method, your component will get
> >> > auto-ajax-updated on every AJAX request. For many problems, this would
> >> be
> >> > convenient because it's easier to just update the thing every time than
> >> to
> >> > think about all the places it might need to be updated.
> >> >
> >> >
> >> > dukejansen wrote:
> >> >>
> >> >> I have some state which backs two panels, Panel A and Panel B, that
> >> may
> >> >> be included as part of other panels. Ultimately they are both on the
> >> same
> >> >> page, and their backing state is shared via the model class that backs
> >> >> both of them. Panel A has an Ajax event handler which modifies the
> >> >> backing model state, after which I want to force Panel A and Panel B
> >> to
> >> >> repaint.
> >> >>
> >> >> I've dealt with this in a few different ways so far, and they all
> >> bother
> >> >> me:
> >> >>
> >> >> 1. Walk up the containership tree and back down again until I find the
> >> >> panel with a known ID or which implements a specific marker interface,
> >> >> finding it that way. (Or do a full DFS of the tree to be thorough.)
> >> >>
> >> >> 2. Assume how my Panel is included and how the other Panel are
> >> included,
> >> >> and explicitly walk up and back down the containership tree. This is
> >> >> fragile because if I decide to rework panel containership, the method
> >> >> could fail.
> >> >>
> >> >> Is there some better way of doing this that I'm missing? A best
> >> practice
> >> >> for reaching out to siblings and cousins?
> >> >>
> >> >> Or something more fundamental to trigger refreshes of all componets
> >> >> backed by that model? Seems like a common use case. A component
> >> updates
> >> >> some state as part of ajax event, then wants to use ajax to repaint
> >> any
> >> >> other components backed by that state.
> >> >>
> >> >> Interested to hear how others have solved this problem.
> >> >>
> >> >> -Jason
> >> >>
> >> >
> >> >
> >>
> >> --
> >> View this message in context:
> >> http://www.nabble.com/Best-Practices-for-accessing-repainting-sibling-cousin-components--tf3841514.html#a10883894
> >> Sent from the Wicket - User mailing list archive at Nabble.com.
> >>
> >>
> >> -------------------------------------------------------------------------
> >> This SF.net email is sponsored by DB2 Express
> >> Download DB2 Express C - the FREE version of DB2 express and take
> >> control of your XML. No limits. Just data. Click to get it now.
> >> http://sourceforge.net/powerbar/db2/
> >> _______________________________________________
> >> Wicket-user mailing list
> >> [email protected]
> >> https://lists.sourceforge.net/lists/listinfo/wicket-user
> >>
> >
> > -------------------------------------------------------------------------
> > This SF.net email is sponsored by DB2 Express
> > Download DB2 Express C - the FREE version of DB2 express and take
> > control of your XML. No limits. Just data. Click to get it now.
> > http://sourceforge.net/powerbar/db2/
> > _______________________________________________
> > Wicket-user mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/wicket-user
> >
> >
>
> --
> View this message in context: 
> http://www.nabble.com/Best-Practices-for-accessing-repainting-sibling-cousin-components--tf3841514.html#a10892376
> Sent from the Wicket - User mailing list archive at Nabble.com.
>
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by DB2 Express
> Download DB2 Express C - the FREE version of DB2 express and take
> control of your XML. No limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> _______________________________________________
> Wicket-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/wicket-user
>

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Wicket-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to