Mats Norén-2 wrote: > > It would be great of you had some code to share, it makes it easier to > follow... :) >
Yeah, no kidding.. :) Here is a quickstart (minus the lib folder, see below for list of jars) that should illustrate what I am trying to accomplish, yes it's pretty stupid, but hopefully covers some of the normal usage scenarios... http://www.nabble.com/file/p10895313/quickstart-listener.zip quickstart-listener.zip One problem that I know that it suffers from is that Components that should act as "event source's" can't be named _easily_ within a repeater. You'll have to use an actual Component reference (instead of the name) in those cases. Chuck Here is the contents of my lib folder, this should be standard for a quickstart... commons-collections-3.2.jar commons-logging-1.0.4.jar jetty-6.1.1.jar jetty-management-6.1.1.jar jetty-util-6.1.1.jar log4j-1.2.13.jar mx4j-3.0.1.jar mx4j-tools-3.0.1.jar servlet-api-2.5-6.1.1.jar slf4j-api-1.3.1.jar slf4j-log4j12-1.3.1.jar wicket-1.3.0-incubating-SNAPSHOT.jar (latest version) wicket-extensions-1.3.0-incubating-SNAPSHOT.jar (latest version) Mats Norén-2 wrote: > > 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 >> >> Wicket-user@lists.sourceforge.net >> >> 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 >> > Wicket-user@lists.sourceforge.net >> > 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. > -- View this message in context: http://www.nabble.com/Best-Practices-for-accessing-repainting-sibling-cousin-components--tf3841514.html#a10895313 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 Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user