Tapestry 5
  1. Tapestry 5
  2. TAP5-742

Add optional component tracing comments to rendered output

    Details

    • Type: New Feature New Feature
    • Status: Closed
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: 5.2.4
    • Fix Version/s: 5.3
    • Component/s: tapestry-core
    • Labels:
      None

      Description

      In complex pages, it can be hard to work backwards from a bit of output HTML in the browser, back to the component that originated the markup.

      This feature adds rendering of comments that provide trace output of which component is currently currently:

      <!-BEGIN Index:loop (context:Index.tml, line 15)-><li>
      <Unable to render embedded object: File (pagelink (context:Index.tml, line 16)--><a href="/abstractcomponentdemo">Abstract Component Demo</a><) not found.-END Index:pagelink->

      Note that the BEGIN comment includes both the complete component id in the page and the location of that in the template. With just the component id it can still be unclear which component is being referenced without the line number.

      For security purposes, this feature cannot be enabled in production mode. In non-production mode it can be enabled two ways:

      • Setting the symbol "tapestry.component-render-tracing-enabled" to "true" (default: false)
      • Setting the request query parameter "t:component-trace" on the URL to "true". This allows enabling for a specific request when you need it in development rather than having it on all the time.

      Note that rendering comments are based on the component lifecycle. Thus in some case where post-render DOM manipulation is performed the markup my not longer be in the correct rendering comments.

        Activity

        Hide
        Ulrich Stärk added a comment -

        I wouldn't want anyone knowing that my application is a Tapestry application to be able to see my component structure, just by adding a query parameter to the url. Why not bind this to "tapestry.production-mode==false && log.isDebugEnabled()"?

        Show
        Ulrich Stärk added a comment - I wouldn't want anyone knowing that my application is a Tapestry application to be able to see my component structure, just by adding a query parameter to the url. Why not bind this to "tapestry.production-mode==false && log.isDebugEnabled()"?
        Hide
        Massimo Lusetti added a comment -

        Yep, just a query parameter seems too much easy as Ulrich proposed a production-mode could be leveraged for this purpose.

        Show
        Massimo Lusetti added a comment - Yep, just a query parameter seems too much easy as Ulrich proposed a production-mode could be leveraged for this purpose.
        Hide
        Thiago H. de Paula Figueiredo added a comment -

        Or an specific symbol which has a default value of tapestry.prodution-mode.

        Show
        Thiago H. de Paula Figueiredo added a comment - Or an specific symbol which has a default value of tapestry.prodution-mode.
        Hide
        Massimo Lusetti added a comment -

        Sure that would be a way to leverage tapestry.production-mode

        Show
        Massimo Lusetti added a comment - Sure that would be a way to leverage tapestry.production-mode
        Hide
        Hugo Palma added a comment -

        I think enabling component debugging on a request-by-request basis would be really helpful.

        What about if the parameter was there but Tapestry would only actually use it's value if tapestry.prodution-mode was false ? Wouldn't that provide both ease of use and security ?

        Show
        Hugo Palma added a comment - I think enabling component debugging on a request-by-request basis would be really helpful. What about if the parameter was there but Tapestry would only actually use it's value if tapestry.prodution-mode was false ? Wouldn't that provide both ease of use and security ?
        Hide
        Sergey Didenko added a comment -

        I made a temporary hackish solution for this, see http://wiki.apache.org/tapestry/Tapestry5HowToVisualizeComponentHierarchy . Hope this helps.

        Show
        Sergey Didenko added a comment - I made a temporary hackish solution for this, see http://wiki.apache.org/tapestry/Tapestry5HowToVisualizeComponentHierarchy . Hope this helps.
        Hide
        Joost Schouten added a comment -

        +1 Unit testing is where is comes in handy. With the addition of the component class to te comment It will allow you to do things like assertComponentOnPage(MyComponent.class).

        Show
        Joost Schouten added a comment - +1 Unit testing is where is comes in handy. With the addition of the component class to te comment It will allow you to do things like assertComponentOnPage(MyComponent.class).
        Hide
        Hudson added a comment -

        Integrated in tapestry-5.2-freestyle #237 (See https://hudson.apache.org/hudson/job/tapestry-5.2-freestyle/237/)

        Show
        Hudson added a comment - Integrated in tapestry-5.2-freestyle #237 (See https://hudson.apache.org/hudson/job/tapestry-5.2-freestyle/237/ )

          People

          • Assignee:
            Dan Adams
            Reporter:
            Howard M. Lewis Ship
          • Votes:
            3 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development