I wrote up a more complete description (with some code examples) of
the possible solution I mentioned here:
http://www.hoolehan.com/computer/apache_click_dom_event_actionresults.html

I hope it's helpful.

On Sat, Jul 16, 2011 at 20:27, Nicholas Dierauf
<[email protected]> wrote:
> Wonderful. Thanks very much for your explanation. I will definitely 
> investigate this.
>
> I implemented a kludgy work-around by adding an additional ActionLink to my 
> form with a "visibility" style of "none" and added a DefaultAjaxBehavior. 
> Then, after the behavior for the Submit button was executed, the JavaScript 
> code then performs an onclick event on this hidden link to update other 
> controls. Not so elegant, but works ... Your suggestion sounds much more 
> elegant. Either way, it is a lot of hoops to jump through in order to achieve 
> a more "desktop" app look and feel :-).
>
> I am still interested in understanding how I can attach an AjaxBehavior to a 
> control such as a Panel and how I can call that behavior via JavaScript. In a 
> subsequent email from Bob Schellink (thanks Bob), he mentions that I would 
> need to send the Control's ID in an Ajax request in order to target that 
> Control and it's behavior. I feel like I've tried this with no success. I'm 
> probably doing it wrong somehow. I would be interested in seeing what a URL 
> would look like to call the targeted Control and behavior. Some sample code 
> would be lovely!
>
> Thanks very much Mike and Bob.
> Nick.
>
> -----Original Message-----
> From: Mike Hoolehan [mailto:[email protected]]
> Sent: Saturday, July 16, 2011 12:22 AM
> To: [email protected]
> Subject: Re: Update multiple panels using Ajax?
>
> I came across something similar when evaluating Click and here's the solution 
> I came up with.  I don't know if it precisely answers your
> question, but maybe it will help.   The sample code has jquery
> dependency, but you could recode without.
>
> The overview: A custom ActionResult child is used to trigger a DOM
> event of any given type.   One or more target elements are bound this
> event type by a custom Behavior, which causes custom js to be executed 
> whenever the event is "heard".  So in your case your initial Ajax request 
> would result in a simple event trigger, and all the other panels and forms 
> would listen for it.  When they heard it, they would each send out their own 
> ajax requests to retrieve their new content.
>
> Here's my addEvent method on  ActionResultWithDomEvent which extends
> ActionResult:
>    public void addEvent(String name) {
>        if (this.getContent() != null)
>            this.setContent(this.getContent() + "jQuery('body').trigger('" + 
> name + "');");
>        else
>            this.setContent("jQuery('body').trigger('" + name + "');");
>    }
> Note the content type is set to javascript for by constructors.
>
> And here's a sample Behavior class that causes some Jquery effect when the 
> event is heard.  There really should be a base class 
> "JavascriptOnEventBehavior" and then you could make your own 
> "AjaxCallOnEventBehavior" or something that inherits... Anyway:
>
> public class JqueryEffectOnEventBehavior implements Behavior {
>   ... effect settings and so on....
>     protected String effect_type = "default_effect_evt";
>
>     public void preRenderHeadElements(Control source) {
>        String id = source.getId();
>        String fxOptionString = JSONValue.toJSONString(this.options);
>        String jsText = "$('body').bind('" + this.event_type + "',
>                                          function(event){" + "$('#" + id + 
> "').effect('" + this.effect_type + "',"
>
>                     + fxOptionString + "," + this.speed + ");});";
>        JsScript jsScript = new JsScript(jsText);
>        jsScript.setExecuteOnDomReady(true);
>        source.getHeadElements().add(jsScript);
>    }
>
> Mike
>
>
> On Fri, Jul 15, 2011 at 23:17, Nicholas Dierauf 
> <[email protected]> wrote:
>> Hello,
>>
>>
>>
>> I have figured out to dynamically update a single control using
>> behaviors and Ajax, but I need to dynamically update multiple controls
>> (panels and
>> forms) when a user clicks a button. I know that I can return a
>> response of concatenated html for each of these controls and have the
>> resulting JavaScript parse out and update the controls. But I am
>> looking for a more elegant solution. Is it possible to make individual
>> Ajax calls to return html for each of the controls, and if so, how
>> would I set up AjaxBehviors (on a Panel, for example) and call these 
>> Behaviors (url's, parameters, etc)?
>>
>>
>>
>> Thank you,
>>
>> Nick.
>

Reply via email to