Uploaded image for project: 'Tapestry'
  1. Tapestry
  2. TAPESTRY-1429

Add getLink() to ICallback

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 4.0.2, 4.1.2, 4.2
    • 4.2
    • Core Components
    • None

    Description

      I'd like to see a getLink() method added to ICallback so we can do redirect-after-post with the callback.

      public ILink getLink(IRequestCycle cycle);

      The reason is that I like to keep a "callback stack" as I descend into the pages. A page can pop its calling page off the stack and often I'd like to redirect to it rather than just activate it.

      Suggested implementation:

      ExternalCallback.java
      ~~~~~~~~~~~~~~~~~

      public ILink getLink(IRequestCycle cycle)
      {
      Defense.notNull(cycle, "cycle");

      try

      { IEngineService service = cycle.getInfrastructure().getServiceMap().getService(Tapestry.EXTERNAL_SERVICE); ILink link = service.getLink(false, new ExternalServiceParameter(_pageName, _parameters)); return link; }

      catch (ClassCastException ex)

      { throw new ApplicationRuntimeException(CallbackMessages.pageNotExternal(_pageName), ex); }
      }


      DirectCallback.java
      ~~~~~~~~~~~~~~~

      public ILink getLink(IRequestCycle cycle)
      {
      Defense.notNull(cycle, "cycle");

      IPage page = cycle.getPage(_pageName);
      IComponent component = page.getNestedComponent(_componentIdPath);
      IDirect direct = null;

      try
      { direct = (IDirect) component; IEngineService service = cycle.getInfrastructure().getServiceMap().getService(Tapestry.DIRECT_SERVICE); ILink link = service.getLink(false, new DirectServiceParameter(direct, _parameters)); return link; }
      catch (ClassCastException ex)
      { throw new ApplicationRuntimeException(CallbackMessages.componentNotDirect(component), component, null, ex); }
      }


      PageCallback.java
      ~~~~~~~~~~~~~~~

      public ILink getLink(IRequestCycle cycle)
      {
      Defense.notNull(cycle, "cycle");

      try { IEngineService service = cycle.getInfrastructure().getServiceMap().getService(Tapestry.PAGE_SERVICE); ILink link = service.getLink(false, _pageName); return link; }
      catch (ClassCastException ex) { throw new ApplicationRuntimeException(CallbackMessages.pageNotExternal(_pageName), ex); }

      }

      Attachments

        Activity

          People

            Unassigned Unassigned
            geoffcallender Geoff Callender
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated: