Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Won't Fix
    • Affects Version/s: 5.1.0.5
    • Fix Version/s: None
    • Component/s: tapestry-core
    • Labels:
      None

      Description

      After stepping through the javascript, I believe it's because the onsubmit event handler for the form is "javascript:Tapestry.waitForPage(event);" who's first line is "if (Tapestry.pageLoaded) return;".

      This is the equivalent of "if (Tapestry.pageLoaded) return false;" when evaluated to a boolean as it is in the LinkSubmit onClick handler:

      if (onsubmit == undefined || onsubmit.call(window.document, event))

      { this.createHidden(); this.form.submit(); }

      .. and therefore "this.form.submit();" is never called.

      Obviously this is a bug, I'm pretty sure the resolution would be to change Tapestry.waitForPage so that it returns true if the page is loaded and false otherwise, ie:

      waitForPage : function(event)

      { if (Tapestry.pageLoaded) return true; ... return false; }

      This will allow 'waitForPage' to be evaluated to a boolean as it is in LinkSubmit.onClick, however there may be a better solution.

      EG:

      MyPage.tml:
      ----------------------------------------------------------------------------------------------------------------------------------------------------
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns="tapestry:parameter">
      <t:form t:id="myForm">
      <t:linksubmit t:id="myLink">link</t:linksubmit>
      <t:submit t:id="mySubmit" />
      </t:form>
      </html>
      ----------------------------------------------------------------------------------------------------------------------------------------------------
      MyPage.java
      ----------------------------------------------------------------------------------------------------------------------------------------------------
      public Class MyPage
      {
      public void onSuccessFromMyForm()

      { LOG.debug("onSuccessFromMyForm"); }

      public void onSelectedFromMyLink()

      { LOG.debug("onSelectedFromMyLink"); }

      public void onSelectedFromMySubmit()

      { LOG.debug("onSelectedFromMySubmit"); }

      }
      ----------------------------------------------------------------------------------------------------------------------------------------------------

        Activity

        Hide
        Massimo Lusetti added a comment -

        I've tested this against 5.1.0.5 and it still apply, I mean LinkSubmit don't fire the events while Submit does.

        Tested against latest 5.3-beta21 LinkSubmit works as expected (fire the event and form submission)

        A workaround for 5.1.0.5 is to monkey patch tapestry.js

        Show
        Massimo Lusetti added a comment - I've tested this against 5.1.0.5 and it still apply, I mean LinkSubmit don't fire the events while Submit does. Tested against latest 5.3-beta21 LinkSubmit works as expected (fire the event and form submission) A workaround for 5.1.0.5 is to monkey patch tapestry.js
        Hide
        Paul Stanton added a comment -

        I have re-tested this under tapestry 5.1.0.5 and it is broken. the example above shows the problem in action for me.

        Show
        Paul Stanton added a comment - I have re-tested this under tapestry 5.1.0.5 and it is broken. the example above shows the problem in action for me.
        Hide
        Howard M. Lewis Ship added a comment -

        I've never seen the problem you see, across multiple browsers and versions of Tapestry. Please re-open with a test case if the problem still remains.

        Show
        Howard M. Lewis Ship added a comment - I've never seen the problem you see, across multiple browsers and versions of Tapestry. Please re-open with a test case if the problem still remains.
        Hide
        Taha Hafeez added a comment -

        Should this one be closed

        Show
        Taha Hafeez added a comment - Should this one be closed
        Hide
        Paul Stanton added a comment -

        i've tested my above idea re returning true from waitForPage and it didn't work.

        it seems that 'onsubmit.call(window.document, event)' returns 'undefined' regardless of what the function returns.

        therefore my workaround is to comment out the whole if statement in LinkSubmit.onClick:

        // if (onsubmit == undefined || onsubmit.call(window.document, event))

        { this.createHidden(); this.form.submit(); }

        Having done this, linksubmit works again, however obviously it doesn't handle a premature click properly.

        Hope that helps you find the proper solution.

        p.

        Show
        Paul Stanton added a comment - i've tested my above idea re returning true from waitForPage and it didn't work. it seems that 'onsubmit.call(window.document, event)' returns 'undefined' regardless of what the function returns. therefore my workaround is to comment out the whole if statement in LinkSubmit.onClick: // if (onsubmit == undefined || onsubmit.call(window.document, event)) { this.createHidden(); this.form.submit(); } Having done this, linksubmit works again, however obviously it doesn't handle a premature click properly. Hope that helps you find the proper solution. p.
        Hide
        Paul Stanton added a comment -

        looks like the same as TAP5-930 however he did not describe it properly.

        Show
        Paul Stanton added a comment - looks like the same as TAP5-930 however he did not describe it properly.

          People

          • Assignee:
            Unassigned
            Reporter:
            Paul Stanton
          • Votes:
            3 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development