Hi Mike,

Thanks for you time!
I've not used ajax yet and would like to make a question in relation
to javascript generated in the template:
Is that js code (jQuery(document).ready(function() and function
makeRequest()) of my responsibility? Having I several controls(the
controls's ID) in my page, would I have to replicate these code for
them(of course, just the controls that we need to make ajaxware!)?

Good work,

Gilberto Caetano de Andrade
www.secad.to.gov.br
http://blog.gilbertoca.com

On Sun, Jul 17, 2011 at 9:01 AM, Mike Hoolehan <[email protected]> wrote:
> 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