Tapestry 5
  1. Tapestry 5
  2. TAP5-1861

Wrap javascript call rendering apis for interoperability and convenience

    Details

    • Type: Improvement Improvement
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: 5.3.2
    • Fix Version/s: None
    • Component/s: tapestry-core
    • Labels:

      Description

      Vast improvements to the ajax and javascript rendering API's have made things much easier to use in tapestry 5.2+, however I still think there is room for improvement. I find I can't work without this 'helper' service I designed to standardise script call rendering between xhr and non-xhr requests. The main motivation/benefit is that a set of functionality can now be called in either (xhr/non-xhr) context and still work. It also has the benefit of building the necessary JavaScriptCallback in the xhr context. In my opinion, this makes user code much tidier:

      public class JavascriptHelperImpl implements JavascriptHelper
      {
      @Inject
      private AjaxResponseRenderer ajaxResponseRenderer;
      @Inject
      private Request request;
      @Inject
      private JavaScriptSupport jsSupport;

      @Override
      public void addScript(final String format, final Object... args)
      {
      if (!request.isXHR())

      { jsSupport.addScript(format, args); return; }

      ajaxResponseRenderer.addCallback(new JavaScriptCallback()
      {
      @Override
      public void run(JavaScriptSupport javascriptSupport)

      { javascriptSupport.addScript(format, args); }

      });
      }
      }

      There may or may not be additional opportunity with the other methods such as 'addInitializerCall' but I haven't needed to.

      This code is free for anyone (including apache/tapestry) to use.

        Issue Links

          Activity

          Howard M. Lewis Ship made changes -
          Assignee Howard M. Lewis Ship [ hlship ]
          Paul Stanton made changes -
          Link This issue relates to TAP5-1870 [ TAP5-1870 ]
          Paul Stanton made changes -
          Field Original Value New Value
          Description Vast improvements to the ajax and javascript rendering API's have made things much easier to use in tapestry 5.2+, however I still think there is room for improvement. I find I can't work without this 'helper' service I designed to standardise script call rendering between xhr and non-xhr requests. The main motivation/benefit is that a set of functionality can now be called in either (xhr/non-xhr) context and still work. It also has the benefit of building the necessary JavaScriptCallback in the xhr context. In my opinion, this makes user code much tidier:

          public class JavascriptHelperImpl implements JavascriptHelper
          {
          @Inject
          private AjaxResponseRenderer ajaxResponseRenderer;
          @Inject
          private Request request;
          @Inject
          private JavaScriptSupport jsSupport;

          @Override
          public void addScript(final String format, final Object... args)
          {
          if (!request.isXHR())
          {
          jsSupport.addScript(format, args);
          return;
          }

          ajaxResponseRenderer.addCallback(new JavaScriptCallback()
          {
          @Override
          public void run(JavaScriptSupport javascriptSupport)
          {
          javascriptSupport.addScript(format, args);
          }
          });
          }
          }

          There may or may not be additional opportunity with the other methods such as 'addInitializerCall' but I haven't needed to.
          Vast improvements to the ajax and javascript rendering API's have made things much easier to use in tapestry 5.2+, however I still think there is room for improvement. I find I can't work without this 'helper' service I designed to standardise script call rendering between xhr and non-xhr requests. The main motivation/benefit is that a set of functionality can now be called in either (xhr/non-xhr) context and still work. It also has the benefit of building the necessary JavaScriptCallback in the xhr context. In my opinion, this makes user code much tidier:

          public class JavascriptHelperImpl implements JavascriptHelper
          {
              @Inject
              private AjaxResponseRenderer ajaxResponseRenderer;
              @Inject
              private Request request;
              @Inject
              private JavaScriptSupport jsSupport;

              @Override
              public void addScript(final String format, final Object... args)
              {
                  if (!request.isXHR())
                  {
                      jsSupport.addScript(format, args);
                      return;
                  }

                  ajaxResponseRenderer.addCallback(new JavaScriptCallback()
                  {
                      @Override
                      public void run(JavaScriptSupport javascriptSupport)
                      {
                          javascriptSupport.addScript(format, args);
                      }
                  });
              }
          }

          There may or may not be additional opportunity with the other methods such as 'addInitializerCall' but I haven't needed to.

          This code is free for anyone (including apache/tapestry) to use.
          Paul Stanton created issue -

            People

            • Assignee:
              Howard M. Lewis Ship
              Reporter:
              Paul Stanton
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:

                Development