struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "draegoon Z" <draego...@hotmail.com>
Subject Re: Struts and AJAX
Date Mon, 03 Jul 2006 18:32:47 GMT
This seems like a cleaner alternative.

What about errors in the ActionForm?

What about firing javascript function before the submit?
I.e., to validate the form (I don't use Validator).

Does the Action have to return 'null' and write directly to the response, or 
can the struts config still be used?


-Joe






-----------------------------------------------------------------------------------

WEB DESIGN BY DRAEGOONZ

Joseph "DraegoonZ" McGranaghan

http://www.draegoonZ.com

603-620-0854

draegoonZ@draegoonZ.com




>From: "Frank W. Zammetti" <fzlists@omnytex.com>
>Reply-To: "Struts Users Mailing List" <user@struts.apache.org>
>To: Struts Users Mailing List <user@struts.apache.org>
>Subject: Re: Struts and AJAX
>Date: Mon, 03 Jul 2006 14:03:45 -0400
>
>Oops, messed up my own config file!  Should be...
>
><ajaxConfig>
>   <group ajaxRef="MyForm" form="compose_mail_form">
>     <element ajaxRef="SubmitButton">
>       <event type="onclick" target="/process_new_mail.do">
>         <requestHandler type="std:QueryString">
>           <parameter>to=to</parameter>
>         </requestHandler>
>         <responseHandler type="std:Alerter">
>           <parameter />
>         </responseHandler>
>       </event>
>     </element>
>   </group>
></ajaxConfig>
>
>Frank W. Zammetti wrote:
>>I'm a big fan of DWR as well, it's a very worthy alternative.
>>
>>But, I don't mind a little self-promotion, so... how does this strike you? 
>>...
>>
>><ajaxConfig>
>>   <group ajaxRef="MyForm" form="compose_mail_form">
>>     <element ajaxRef="SubmitButton">
>>       <requestHandler type="std:QueryString" 
>>target="/process_new_mail.do">
>>       <parameter>to=to</parameter>
>>       <responseHandler" type="std:Alerter">
>>       <parameter />
>>     </element>
>>   </group>
>></ajaxConfig>
>>
>>Then, in your JSP:
>>
>><html:form styleId="compose_mail_form" method="post"
>>action="process_new_mail" enctype="multipart/form-data" focus="to">
>><label for='to' <logic:messagesPresent
>>property="to">class='error'</logic:messagesPresent>>To:</label>
>><html:text property="to" styleClass="text" style="width: 25%;" />
>><br class="clear" />
>>  ...
>>//more form elements
>>...
>><a href="#">SUBMIT</a><ajax:event ajaxRef="MyForm/SubmitButton" />
>></html:form>
>><ajax:enable />
>>
>>This would result in some Action, mapped to process_new_mail.do being 
>>executed, and you would get a single parameter submitted, "to", using the 
>>value of the form field "to".  The response from the server, whatever it 
>>is, would be displayed via alert().
>>
>>This is what AjaxParts Taglib (APT) offers... you define an event in a 
>>config file, some user-initiated (usually) event that fires an AJAX 
>>request.  For each event, you define a request handler, which forms the 
>>request to the server... there are a number of "standard" handlers, for 
>>instance, if you want to construct XML from your form, that's standard.  
>>You also define one (or more) response handlers, which is something that 
>>happens when the response comes back.  Again, there are a number of 
>>standard handlers, like Alerter... there is also things like InnerHTML 
>>(populate a page element by updating innerHTML), stdXSLT (transform XML 
>>response via XSLT on client), and much more.
>>
>>Note that you didn't have to right ANY Javascript whatsoever!  And the 
>>changes to your JSP amounts to adding an <ajax:event> tag to any element 
>>that will fire an AJAX event, and the <ajax:enable> tag at the end (plus 
>>the taglib declaration of course).  Changing the AJAX functionality is as 
>>easy as modifying the config file, you wouldn't need to touch your JSP 
>>again!  And, should you need to do more advanced things that the standard 
>>handlers don't cover (they should do the job probably 80% of the time or 
>>better though), there is a pretty simple mechanism for writing your own 
>>custom handlers, which you can then use just like the standard handlers.
>>
>>If the no coding approach sounds good, check it out further:
>>
>>http://javawebparts.sourceforge.net/
>>
>>I suggest clicking the Javadocs link and going to the first package 
>>listed, javawebparts.ajaxparts.taglib... all the details can be found 
>>there... then, download JWP and check out the sample app for all sorts of 
>>examples of APT usage.
>>
>>Shill time over :)
>>
>>Frank
>>
>>draegoon Z wrote:
>>>Hey,
>>>
>>>I use DWR + dojo to use AJAX with struts:
>>>
>>>     http://getahead.ltd.uk/dwr/
>>>
>>>     http://dojotoolkit.com/
>>>
>>>Although dojo has some flashy widgets and stuff, its power is the 
>>>dojo.io.bind() function:
>>>
>>>     http://dojotoolkit.org/docs/intro_to_dojo_io.html
>>>
>>>
>>>
>>>Here is an example of using Struts Actions with bind():
>>>
>>>
>>><html:form styleId="compose_mail_form" method="post" 
>>>action="process_new_mail" enctype="multipart/form-data" focus="to">
>>>
>>>
>>><label for='to' <logic:messagesPresent 
>>>property="to">class='error'</logic:messagesPresent>>To:</label>
>>><html:text property="to" styleClass="text" style="width: 25%;" />
>>><br class="clear" />
>>>
>>>...
>>>//more form elements
>>>...
>>>
>>><a href="#" onclick="submitNewMail();">SUBMIT</a>
>>></html:form>
>>>
>>>NOTE: form has been given a 'styleId' and using <logic:messagesPresent>

>>>to display errors in form
>>>
>>>
>>>function submitNewMail(){
>>>
>>>        //validateNewMail(form);
>>>
>>>        var bindArgs = {
>>>        url: "<html:rewrite action="process_new_mail" />",
>>>        error: function(type, data, evt){
>>>            alert("An error occurred submitting new mail: " + data);
>>>        },
>>>        load: function(type, data, evt){
>>>
>>>            DWRUtil.setValue("social_mail_right_con", data);    /* 
>>>setValue doesn't execute javascript! */
>>>            
>>>document.getElementById('social_popup_layer_container').innerHTML=document.getElementById('ajax_hidden_helper').innerHTML;
>>>
>>>            popup('social_popup_layer_container',true);
>>>
>>>        },
>>>        mimetype: "text/html",
>>>        formNode: document.getElementById("compose_mail_form")
>>>        };
>>>
>>>        dojo.io.bind(bindArgs);
>>>    }
>>>
>>>
>>>NOTE:
>>>
>>>1) the use of <html:rewrite /> for the 'url'
>>>
>>>2) formNode is the 'styleId' of your <html:form />
>>>
>>>3) the stuff you see in the load function is application specific. It is 
>>>how I display <html:errors />
>>>    and <html:messages /> in a backwards-compatible manner for AJAX. I 
>>>basically force
>>>    the reloading of a JSP (tile) that has the code: <html:errors /> and

>>>relevant logic.
>>>
>>>
>>>Ok, now for the good stuff:
>>>
>>>1) Yes, your ActionForm will work as usual. If it is invalid, errors are 
>>>displayed. If it validates, it goes
>>>    on to the Action.
>>>
>>>2) The action MUST RETURN "NULL", otherwise the page will reload to your 
>>><forward>
>>>
>>>3) You write your output to the response object in your action. Remember 
>>>when it was just servlets?
>>>
>>>public ActionForward execute(ActionMapping mapping, ActionForm form, 
>>>HttpServletRequest request, HttpServletResponse response) throws 
>>>IOException, ServletException {
>>>
>>>     //Make ActionMessages for business logic errors...
>>>     ActionMessages messages = new ActionMessages();
>>>     HttpSession session = request.getSession();
>>>     MyForm f = (MyForm)form;
>>>
>>>     response.setContentType("text/html");
>>>     PrintWriter out = response.getWriter();
>>>
>>>
>>>     out.print("ACTION_SUCCESS:Message Sent!");
>>>     out.close();
>>>
>>>
>>>     //return(mapping.findForward("success"));    NOT AJAX WAY!
>>>
>>>     return(null);
>>>}
>>>
>>>
>>>There are many ways to handle the repsonse stuff with AJAX + STRUTS. Use 
>>>your imagination.
>>>
>>>In this instance I just have a javascript function parse the output. You 
>>>could return HTML and use
>>>innerHTML(). You could parse a string like: "FORWARD:my_action_name".
>>>You could have: "JAVASCRIPT-FUNCTION:handleSuccess()".
>>>
>>>I often use dojo.io.bind() in conjunction with DWR.setValue():
>>>
>>>     http://getahead.ltd.uk/dwr/browser/util/setvalue
>>>
>>>or using DWR to forward to a JSP:
>>>
>>>     http://getahead.ltd.uk/dwr/examples/text
>>>
>>>
>>>
>>>Bottom line is that javascript will handle the forwarding instead of you 
>>>struts config.
>>>If some has a way to do it with the config, I'd love to hear from you.
>>>
>>>
>>>BTW - I took the time to write this because after all the reading and 
>>>searching I did,
>>>I still didn't have a clue how to use all this stuff together. I hope 
>>>this helps everyone.
>>>
>>>-Joe
>>>
>>>
>>>
>>>
>>>-----------------------------------------------------------------------------------
>>>
>>>
>>>WEB DESIGN BY DRAEGOONZ
>>>
>>>Joseph "DraegoonZ" McGranaghan
>>>
>>>http://www.draegoonZ.com
>>>
>>>603-620-0854
>>>
>>>draegoonZ@draegoonZ.com
>>>
>>>
>>>
>>>
>>>>From: chamal desilva <chamalsl@yahoo.com>
>>>>Reply-To: "Struts Users Mailing List" <user@struts.apache.org>
>>>>To: user@struts.apache.org
>>>>Subject: Struts and AJAX
>>>>Date: Sun, 2 Jul 2006 20:57:52 -0700 (PDT)
>>>>
>>>>Hi,
>>>>
>>>>Can I use struts with AJAX. Does struts has classes
>>>>and tags for AJAX or do I have write my own code.
>>>>
>>>>Thanking You,
>>>>Chamal.
>>>>
>>>>__________________________________________________
>>>>Do You Yahoo!?
>>>>Tired of spam?  Yahoo! Mail has the best spam protection around
>>>>http://mail.yahoo.com
>>>>
>>>>---------------------------------------------------------------------
>>>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>>For additional commands, e-mail: user-help@struts.apache.org
>>>>
>>>
>>>
>>>
>>>---------------------------------------------------------------------
>>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>For additional commands, e-mail: user-help@struts.apache.org
>>>
>>>
>>>
>>>
>>
>
>--
>Frank W. Zammetti
>Founder and Chief Software Architect
>Omnytex Technologies
>http://www.omnytex.com
>AIM: fzammetti
>Yahoo: fzammetti
>MSN: fzammetti@hotmail.com
>Java Web Parts -
>http://javawebparts.sourceforge.net
>Supplying the wheel, so you don't have to reinvent it!
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>For additional commands, e-mail: user-help@struts.apache.org
>



---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Mime
View raw message