Guys anyone?  Is it not possible with T5?

On Tue, Jul 20, 2010 at 8:10 PM, Dmitriy Vsekhvalnov <dvsekhval...@gmail.com
> wrote:

> Hello all,
>   i have a question about ajax form submission in T5.  I was needed
> checkbox implementation which 'onClick' submits entire form linked to zone
> (wrapped inside zone).
>
> I ended up with simple implementation, which i post at the end of message.
> Everything is fine, except i found that before sending actual AjaxRequest
> form is restored to original state and only updated after new rendered form
> is returned from tapestry.
>
> Simply, i set checkbox -> form is restored (checkbox is cleared) -> ajax
> request -> process ajax reply (checkbox is set). And vice-versa if i clear
> checkbox.  if server has some lag it causes some sloppy behavior to user,
> because they do not see change immediately and waiting while new form
> returned. But this is not what ajax is for, right? :)
>
> I found it happens right between (in tapestry.js) :
> linkZone : function(element, zoneId, url)
>
> element.sendAjaxRequest(url, {
>                         onSuccess : successHandler
> });
>
> and
> processReply : function(reply) {.....}
>
>
> , but can't find what exactly happening. Any help greatly appreciated
>
> Here is my implementation of AjaxCheckbox
>
> ............................................................................
> @IncludeJavaScriptLibrary("ajaxcheckbox.js")
> public class AjaxCheckbox extends AbstractField
> {
>     @Parameter(required = false, autoconnect = false)
>     private boolean value;
>
>     @Parameter(required = false)
>     private boolean selectAllMode;
>
>     @Parameter(required = false)
>     private boolean radioMode;
>
>     @Inject
>     private RenderSupport renderSupport;
>
>     @Environmental
>     private FormSupport formSupport;
>
>     @Inject
>     private ComponentResources resources;
>
>     @Environmental
>     private ValidationTracker tracker;
>
>     @Inject
>     private Request request;
>
>     @BeginRender
>     void begin(MarkupWriter writer)
>     {
>         String asSubmitted = tracker.getInput(this);
>
>         boolean checked = asSubmitted != null ?
> Boolean.parseBoolean(asSubmitted) : value;
>
>         writer.element("input", "type", "checkbox",
>                        "name", getControlName(),
>                        "id", getClientId(),
>                        "checked", checked ? "checked" : null);
>
>         resources.renderInformalParameters(writer);
>
>         //decorateInsideField();
>     }
>
>     @AfterRender
>     void after(MarkupWriter writer)
>     {
>         writer.end(); // input
>
>         renderSupport.addInit("ajaxCheckbox",
>                               formSupport.getClientId(),
>                               getClientId(),
>                               valueOf(selectAllMode),
>                               valueOf(radioMode));
>     }
>
>     @Override
>     protected void processSubmission(String elementName)
>     {
>         String postedValue = request.getParameter(elementName);
>
>         // record as "true" or "false"
>
>         tracker.recordInput(this, Boolean.toString(postedValue != null));
>
>         value = postedValue != null;
>     }
> }
>
> ............................................................................
>
>
> ............................................................................
> Tapestry.AjaxCheckbox = Class.create({
>
>     initialize: function(formId, clientId, selectAllMode, radioMode)
>     {
>         this.selectAllMode=selectAllMode;
>         this.radioMode=radioMode;
>         this.form = $(formId);
>         this.element = $(clientId);
>         //this.element.stopObserving("click",this.onClick);
>         this.element.observe("click",
> this.onClick.bindAsEventListener(this));
>     },
>
>     createHidden : function()
>     {
>         var hidden = new Element("input", { "type":"hidden",
>             "name": this.element.id + ":hidden",
>             "value": this.element.id});
>
>         this.element.insert({after:hidden});
>     },
>
>     onClick : function(event)
>     {
>         Event.stop(event);
>
>         if(this.radioMode=='true')
>         {
>             $$('input').each(function(e)
>             {
>               if(e.type=='checkbox')
>               {
>                   e.checked=0;
>               }
>              });
>
>             //set self
>             this.element.checked=1;
>         }
>         else if(this.selectAllMode=='true')
>         {
>             $$('input').each(function(e)
>             {
>               if(e.type=='checkbox')
>               {
>                   e.checked=1;
>               }
>              });
>
>             //clean self
>             this.element.checked=0;
>         }
>
>
>         var onsubmit = this.form.onsubmit;
>         if (onsubmit == undefined || onsubmit.call(window.document, event))
>         {
>             this.createHidden();
>             this.form.submit();
>         }
>
> //        alert(this.element.checked)
> //        return true;
>     }
> });
>
> Tapestry.Initializer.ajaxCheckbox = function(formId, clientId,
> selectAllMode, radioMode)
> {
>     new Tapestry.AjaxCheckbox(formId, clientId, selectAllMode, radioMode);
> }
>
> ............................................................................
>

Reply via email to