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
