Tapestry
  1. Tapestry
  2. TAPESTRY-1583

The "block:" binding prefix may only reference blocks that appear before the reference in the template, an error occurs if the block is defined later in the template

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 5.0.4
    • Fix Version/s: 5.0.5
    • Component/s: None
    • Labels:
      None

      Description

      As per http://tapestry.apache.org/tapestry5/tapestry-core/guide/templates.html, the template of a page that calls a layout component must look like this:

      <t:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
      My Page Specific Content
      </t:layout>

      The layout component looks like this:
      <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
      <head>
      <title>My Tapestry Application</title>
      </head>
      <body>
      <t:body/>
      </body>
      </html>

      If I want a more sophisticated layout that renders blocks passed as parameters instead of just a body, i'd be tempted to try this:
      <t:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd" block1="block:block1" block2="block:block2">
      <t:block id="block1">My Page Specific Content for Block 1</t:block>
      <t:block id="block2">My Page Specific Content for Block 2</t:block>
      </t:layout>

      But tapestry can't bind block1 and block2, because they appear in the template after the binding point.

      This solution works, but produces an extra <html> tag in the output document:
      <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
      <t:block id="block1">My Page Specific Content for Block 1</t:block>
      <t:block id="block2">My Page Specific Content for Block 2</t:block>
      <t:layout block1="block:block1" block2="block:block2"></t:layout>
      </html>

        Activity

        Jeremy F. Kassis created issue -
        Hide
        Howard M. Lewis Ship added a comment -

        I'd like to see a more realistic test case; what you have should be working, even though <t:parameter> was designed specifically to address what you are attempting.

        Show
        Howard M. Lewis Ship added a comment - I'd like to see a more realistic test case; what you have should be working, even though <t:parameter> was designed specifically to address what you are attempting.
        Hide
        Howard M. Lewis Ship added a comment -

        I dug around a little and I see the problem.

        The block: binding prefix is evaluated "in line", so you are right, it can't reference blocks that haven't yet been encountered during the processing of the template.

        I'll defer out the resolution of the block until it is needed and that should take care of the problem.

        Show
        Howard M. Lewis Ship added a comment - I dug around a little and I see the problem. The block: binding prefix is evaluated "in line", so you are right, it can't reference blocks that haven't yet been encountered during the processing of the template. I'll defer out the resolution of the block until it is needed and that should take care of the problem.
        Howard M. Lewis Ship made changes -
        Field Original Value New Value
        Assignee Howard M. Lewis Ship [ hlship ]
        Howard M. Lewis Ship made changes -
        Summary Cannot Pass Blocks to Layout Components The "block:" binding prefix may only reference blocks that appear before the reference in the template, an error occurs if the block is defined later in the template
        Howard M. Lewis Ship made changes -
        Status Open [ 1 ] Closed [ 6 ]
        Resolution Fixed [ 1 ]
        Fix Version/s 5.0.5 [ 12312477 ]
        Mark Thomas made changes -
        Workflow jira [ 12406452 ] Default workflow, editable Closed status [ 12567232 ]
        Mark Thomas made changes -
        Workflow Default workflow, editable Closed status [ 12567232 ] jira [ 12589934 ]
        Transition Time In Source Status Execution Times Last Executer Last Execution Date
        Open Open Closed Closed
        6d 23h 52m 1 Howard M. Lewis Ship 24/Jun/07 16:30

          People

          • Assignee:
            Howard M. Lewis Ship
            Reporter:
            Jeremy F. Kassis
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development