Tapestry
  1. Tapestry
  2. TAPESTRY-1901

Grid component calls prepare() and getRowValue() with incorrect values after items are removed

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 5.0.6
    • Fix Version/s: 5.0.10
    • Component/s: Core Components
    • Labels:
      None
    • Environment:
      Debian Lenny, Sun JDK 1.6, Jetty, Tapestry 5.0.6

      Description

      I have a grid defined with rowsPerPage = 2. When there are 3 elements in the GridDataSource, the user clicks the "2" link to display page 2. (So that there is only one element displaying). The user clicks an action link that has the following event handler defined:

      public ListAccount onActionFromDel( Integer prmRId )

      { _DAO.delByRId(prmRId); return( _listAccount ); }

      (ListAccount is the current page class).

      As the Grid attempts to re-render itself, it calls getAvailableRows() on the GridDataSource, and getAvailableRows() correctly returns 2.

      The Grid should automatically go to page 1 since there are only 2 rows available and rowsPerPage is set to 2. However, instead, the Grid calls prepare() with firstResult = 2 and lastResult = 1. After this, the Grid calls getRowValue() with a negative value.

      Note that the problem goes away if I add a line to the event handler:
      public ListAccount onActionFromDel( Integer prmRId )

      { _DAO.delByRId(prmRId); _listAccount._actList.setCurrentPage( 1 ); <------ this line solves the problem return( _listAccount ); }

      But I don't believe this should be necessary.

      Thanks,
      Andy

        Activity

        Andy Huhn created issue -
        Andy Huhn made changes -
        Field Original Value New Value
        Description I have a grid defined with rowsPerPage = 2. When there are 3 elements in the GridDataSource, I display page 2. (So that there is only one element displaying). The user clicks an action link that has the following event handler defined:

            public ListAccount onActionFromDel( Integer prmRId ) {
                _DAO.delByRId(prmRId);
                return( _listAccount );
            }

        (ListAccount is the current page class).

        The Grid calls getAvailableRows() on the GridDataSource, and getAvailableRows() returns 2.

        The Grid should automatically go to page 1 since there are only 2 rows available and rowsPerPage is set to 2. However, instead, the Grid calls prepare() with firstResult = 2 and lastResult = 1. After this, the Grid calls getRowValue() with a negative value.

        Note that the problem goes away if I add a line to the event handler:
            public ListAccount onActionFromDel( Integer prmRId ) {
                _DAO.delByRId(prmRId);
                _listAccount._actList.setCurrentPage( 1 ); <------ this line solves the problem
                return( _listAccount );
            }

        But I don't believe this should be necessary.

        Thanks,
        Andy
        I have a grid defined with rowsPerPage = 2. When there are 3 elements in the GridDataSource, the user clicks the "2" link to display page 2. (So that there is only one element displaying). The user clicks an action link that has the following event handler defined:

            public ListAccount onActionFromDel( Integer prmRId ) {
                _DAO.delByRId(prmRId);
                return( _listAccount );
            }

        (ListAccount is the current page class).

        As the Grid attempts to re-render itself, it calls getAvailableRows() on the GridDataSource, and getAvailableRows() correctly returns 2.

        The Grid should automatically go to page 1 since there are only 2 rows available and rowsPerPage is set to 2. However, instead, the Grid calls prepare() with firstResult = 2 and lastResult = 1. After this, the Grid calls getRowValue() with a negative value.

        Note that the problem goes away if I add a line to the event handler:
            public ListAccount onActionFromDel( Integer prmRId ) {
                _DAO.delByRId(prmRId);
                _listAccount._actList.setCurrentPage( 1 ); <------ this line solves the problem
                return( _listAccount );
            }

        But I don't believe this should be necessary.

        Thanks,
        Andy
        Howard M. Lewis Ship made changes -
        Assignee Howard M. Lewis Ship [ hlship ]
        Howard M. Lewis Ship made changes -
        Status Open [ 1 ] In Progress [ 3 ]
        Howard M. Lewis Ship made changes -
        Summary Grid component calls prepare() and getRowValue() with incorrect values Grid component calls prepare() and getRowValue() with incorrect values after items are removed
        Howard M. Lewis Ship made changes -
        Fix Version/s 5.0.10 [ 12312936 ]
        Status In Progress [ 3 ] Closed [ 6 ]
        Resolution Fixed [ 1 ]
        Mark Thomas made changes -
        Workflow jira [ 12416905 ] Default workflow, editable Closed status [ 12569295 ]
        Mark Thomas made changes -
        Workflow Default workflow, editable Closed status [ 12569295 ] jira [ 12590545 ]

          People

          • Assignee:
            Howard M. Lewis Ship
            Reporter:
            Andy Huhn
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development