Tapestry
  1. Tapestry
  2. TAPESTRY-2073

Nested Ifs without explicit ids cause StaleLinkException

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Critical Critical
    • Resolution: Fixed
    • Affects Version/s: 4.1.5
    • Fix Version/s: 4.1.5
    • Component/s: Framework
    • Labels:
      None
    • Environment:
      Tapestry 4.1.4 snapshot from 1-22, WinXP, Firefox 2

      Description

      The following template generates a StaleLinkException when Submit is clicked:

      <form jwcid="@Form">
      <outerIf jwcid="@If" condition="true">
      <innerIf jwcid="@If" condition="true">
      <span jwcid="@Insert" value="0" />
      </innerIf>
      </outerIf>
      <submit jwcid="@Submit" listener="listener:submit" />
      </form>

      If an explicit id is provided to either If however, it works fine:

      <form jwcid="@Form">
      <outerIf jwcid="@If" condition="true">
      <innerIf jwcid="innerIf@If" condition="true">
      <span jwcid="@Insert" value="0" />
      </innerIf>
      </outerIf>
      <submit jwcid="@Submit" listener="listener:submit" />
      </form>

      The Stale Link page indicated this error with the first template:

      Rewind of form DirectorAccount/$Form expected allocated id #2 to be 'If_0_4', but was 'If_41' (requested by component DirectorAccount/$If_0).

      I suspect this may be caused by the changes made for TAPESTRY-1278, since this exception does not occur in 4.1.3.

        Activity

        Ben Dotte created issue -
        Hide
        Jesse Kuhnert added a comment -

        Hey Ben,

        I've tried to re-create this but am not getting the StaleLink exceptions that you are.

        I added the first example snippet to the TimeTracker Home.html page at the bottom (and top / middle) with various ifs before and after it but still no luck.

        Perhaps the structure of your page has some other things happening that make it harder to re-produce? (or perhaps you aren't using the latest snapshot version to test? sounds unlikely but who knows)

        Will wait to see if there is another way to get it to happen.

        Show
        Jesse Kuhnert added a comment - Hey Ben, I've tried to re-create this but am not getting the StaleLink exceptions that you are. I added the first example snippet to the TimeTracker Home.html page at the bottom (and top / middle) with various ifs before and after it but still no luck. Perhaps the structure of your page has some other things happening that make it harder to re-produce? (or perhaps you aren't using the latest snapshot version to test? sounds unlikely but who knows) Will wait to see if there is another way to get it to happen.
        Hide
        Ben Dotte added a comment -

        You're right, I could not get this to reproduce using the snippet in isolation. Components included in our border were contributing to the id allocation scheme breaking down somewhere but I have finally reproduced it using a more complex combination of components (I have not included the .java source as they basically have nothing in them):

        NestedIfBorder.html:
        <shell jwcid="@Shell" title="NestedIfTest">
        <body jwcid="@Body">
        <topComponent jwcid="@TopComponent" />
        <component jwcid="@BorderComponent" />
        <span jwcid="@RenderBody"/>
        </body>
        </shell>

        TopComponent.html:
        <span jwcid="@If" condition="true" id="testId">
        </span>
        <span jwcid="@If" condition="true">
        </span>

        BorderComponent.html:
        <if jwcid="@If" condition="true">
        <nestedComponent jwcid="@NestedComponent" />
        </if>

        NestedComponent.html:
        <if jwcid="@If" condition="true">
        test
        </if>

        NestedIfTest.html:
        <border jwcid="@NestedIfBorder">
        <form jwcid="@Form">
        <outerIf jwcid="@If" condition="true">
        <innerIf jwcid="@If" condition="true">
        <span jwcid="@Insert" value="0" />
        </innerIf>
        </outerIf>
        <submit jwcid="@Submit" listener="listener:submit" />
        </form>
        </border>

        Sorry for the lengthy snippet but I could not get this to reproduce with anything simpler. Any small change in this example seems to make the StaleLinkException go away.

        Please try this out and see if you can reproduce it now. Thanks!

        Show
        Ben Dotte added a comment - You're right, I could not get this to reproduce using the snippet in isolation. Components included in our border were contributing to the id allocation scheme breaking down somewhere but I have finally reproduced it using a more complex combination of components (I have not included the .java source as they basically have nothing in them): NestedIfBorder.html: <shell jwcid="@Shell" title="NestedIfTest"> <body jwcid="@Body"> <topComponent jwcid="@TopComponent" /> <component jwcid="@BorderComponent" /> <span jwcid="@RenderBody"/> </body> </shell> TopComponent.html: <span jwcid="@If" condition="true" id="testId"> </span> <span jwcid="@If" condition="true"> </span> BorderComponent.html: <if jwcid="@If" condition="true"> <nestedComponent jwcid="@NestedComponent" /> </if> NestedComponent.html: <if jwcid="@If" condition="true"> test </if> NestedIfTest.html: <border jwcid="@NestedIfBorder"> <form jwcid="@Form"> <outerIf jwcid="@If" condition="true"> <innerIf jwcid="@If" condition="true"> <span jwcid="@Insert" value="0" /> </innerIf> </outerIf> <submit jwcid="@Submit" listener="listener:submit" /> </form> </border> Sorry for the lengthy snippet but I could not get this to reproduce with anything simpler. Any small change in this example seems to make the StaleLinkException go away. Please try this out and see if you can reproduce it now. Thanks!
        Jesse Kuhnert made changes -
        Field Original Value New Value
        Assignee Jesse Kuhnert [ jkuhnert ]
        Hide
        Jesse Kuhnert added a comment -

        Found it! Thanks for the grunt work on re-producing n stuff.

        Show
        Jesse Kuhnert added a comment - Found it! Thanks for the grunt work on re-producing n stuff.
        Jesse Kuhnert made changes -
        Fix Version/s 4.1.4 [ 12312763 ]
        Resolution Fixed [ 1 ]
        Status Open [ 1 ] Resolved [ 5 ]
        Mark Thomas made changes -
        Workflow jira [ 12421785 ] Default workflow, editable Closed status [ 12568439 ]
        Mark Thomas made changes -
        Workflow Default workflow, editable Closed status [ 12568439 ] jira [ 12591492 ]

          People

          • Assignee:
            Jesse Kuhnert
            Reporter:
            Ben Dotte
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development