ICEfaces
  1. ICEfaces
  2. ICE-9471

ace:tableConfigPanel - Add built in support for ace:columnGroup

    Details

    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: EE-3.3.0.GA
    • Fix Version/s: 4.0.BETA, EE-3.3.0.GA_P02, 4.0
    • Component/s: ACE-Components
    • Labels:
      None
    • Environment:
      All
    • Assignee Priority:
      P1
    • Salesforce Case Reference:
    • Affects:
      Documentation (User Guide, Ref. Guide, etc.), Sample App./Tutorial

      Description

      Feature Request: Currently the tableConfigPanel supports the usage of a columnGroup tags through application code. This request is to investigate the possibility to add support for this without the application code to sync the header and body table ace:column tags.
      1. Case12386Example.zip
        21 kB
        Arran Mccullough
      1. colGroupWhiteboard.JPG
        437 kB

        Issue Links

          Activity

          Arran Mccullough created issue -
          Hide
          Arran Mccullough added a comment - - edited

          This had originally been reported as a bug in ICE-8573. Adding support for this will help make it easier for developers to intuitively use the panel when using column groups.

          Show
          Arran Mccullough added a comment - - edited This had originally been reported as a bug in ICE-8573. Adding support for this will help make it easier for developers to intuitively use the panel when using column groups.
          Arran Mccullough made changes -
          Field Original Value New Value
          Salesforce Case Reference 5007000000Ucp0DAAR
          Deryk Sinotte made changes -
          Assignee Mark Collette [ mark.collette ]
          Fix Version/s 3.4 [ 10770 ]
          Support Case References Assigned to Mark for re-assignment. As a new feature request, this may not be suitable for inclusion in the upcoming EE patch so I've tracked targeted it for 3.4 for the time being.
          Mark Collette made changes -
          Assignee Mark Collette [ mark.collette ] Nils Lundquist [ nils.lundquist ]
          Assignee Priority P3 [ 10012 ]
          Deryk Sinotte made changes -
          Support Case References Assigned to Mark for re-assignment. As a new feature request, this may not be suitable for inclusion in the upcoming EE patch so I've tracked targeted it for 3.4 for the time being.
          Hide
          Deryk Sinotte added a comment -

          (Putting comment into proper field).

          Assigned to Mark for re-assignment. As a new feature request, this may not be suitable for inclusion in the upcoming EE patch so I've tracked targeted it for 3.4 for the time being.

          Show
          Deryk Sinotte added a comment - (Putting comment into proper field). Assigned to Mark for re-assignment. As a new feature request, this may not be suitable for inclusion in the upcoming EE patch so I've tracked targeted it for 3.4 for the time being.
          Hide
          Arran Mccullough added a comment -

          Another incompatibility with using the tableConfigPanel with a columnGroup is related to an issue reported in ICE-9055. When displaying the panel in the last column, and if the last column (header row and body column) are not rendered, the button to open the panel is not displayed. Attached is a basic test case that shows this behavior.

          Show
          Arran Mccullough added a comment - Another incompatibility with using the tableConfigPanel with a columnGroup is related to an issue reported in ICE-9055 . When displaying the panel in the last column, and if the last column (header row and body column) are not rendered, the button to open the panel is not displayed. Attached is a basic test case that shows this behavior.
          Arran Mccullough made changes -
          Attachment Case12386Example.zip [ 16485 ]
          Arran Mccullough made changes -
          Salesforce Case Reference 5007000000Ucp0DAAR 5007000000Ucp0DAAR,5007000000W3ymRAAR
          Hide
          Ken Fyten added a comment - - edited

          In order to achieve this, the ace:dataTable will need to use a new model for the table header region, similar to what is done now for the actual columns. This "headerModel" will:

          • Provide the hierarchy of which columns and bottom-row headers are grouped under the other (if any) column header rows.
          • Provide the order of the header columns, as indicated by the order of the corresponding table body columns.
          • Be initially created to match the initial column header state (from the facelet markup), but can subsequently be modified by the tableConfigPanel component in response to user preference changes to column ordering and visibility.

          At render-time, the header renderer will construct the header markup based on a combination of the column order and header-row hierarchy in the model, and by setting the colspan on the header row cells by matching the actual number of rendered child columns under the header row (if any).

          Show
          Ken Fyten added a comment - - edited In order to achieve this, the ace:dataTable will need to use a new model for the table header region, similar to what is done now for the actual columns. This "headerModel" will: Provide the hierarchy of which columns and bottom-row headers are grouped under the other (if any) column header rows. Provide the order of the header columns, as indicated by the order of the corresponding table body columns. Be initially created to match the initial column header state (from the facelet markup), but can subsequently be modified by the tableConfigPanel component in response to user preference changes to column ordering and visibility. At render-time, the header renderer will construct the header markup based on a combination of the column order and header-row hierarchy in the model, and by setting the colspan on the header row cells by matching the actual number of rendered child columns under the header row (if any).
          Ken Fyten made changes -
          Assignee Nils Lundquist [ nils.lundquist ] Mark Collette [ mark.collette ]
          Fix Version/s EE-3.4.0.GA [ 11171 ]
          Affects Documentation (User Guide, Ref. Guide, etc.),Sample App./Tutorial [ 10003, 10001 ]
          Assignee Priority P3 [ 10012 ] P1 [ 10010 ]
          Hide
          Ken Fyten added a comment -

          Attached whiteboard pic mockup of table scenario with corresponding tableConfigPanel.

          Show
          Ken Fyten added a comment - Attached whiteboard pic mockup of table scenario with corresponding tableConfigPanel.
          Ken Fyten made changes -
          Attachment colGroupWhiteboard.JPG [ 16489 ]
          Hide
          Ken Fyten added a comment -

          For the ace:tableConfigPanel, it will need to modified to support a nested hierarchy of column-groups to configure.

          Notes:

          • Each header row in the table should be represented as a level in the hierarchy.
          • Columns may only be moved within their existing columnGroup header hierarchy.
          • Column naming, visibility and sorting can only be set on actual columns, not headers.

          It seems possible that the tableConfigPanel could be implemented by nesting multiple instances of what is essentially the current configPanel (one level list of columns), with separate instances/lists for each columnGroup row and set in the header (see whiteboard screenshot). Implementing it this way ensures that the columns cannot be moved outside of their header hierarchy, as the column move feature would limit moves within each configPanel list panel.

          Show
          Ken Fyten added a comment - For the ace:tableConfigPanel, it will need to modified to support a nested hierarchy of column-groups to configure. Notes: Each header row in the table should be represented as a level in the hierarchy. Columns may only be moved within their existing columnGroup header hierarchy. Column naming, visibility and sorting can only be set on actual columns, not headers. It seems possible that the tableConfigPanel could be implemented by nesting multiple instances of what is essentially the current configPanel (one level list of columns), with separate instances/lists for each columnGroup row and set in the header (see whiteboard screenshot). Implementing it this way ensures that the columns cannot be moved outside of their header hierarchy, as the column move feature would limit moves within each configPanel list panel.
          Ken Fyten made changes -
          Attachment colGroupWhiteboard.JPG [ 16489 ]
          Ken Fyten made changes -
          Attachment colGroupWhiteboard.JPG [ 16490 ]
          Hide
          Mark Collette added a comment -

          Added ColumnGroupModel, which manages a multi-row model of columns, and provides means for iterating/traversing through that 2D space. Added ColumnModel, which binds the header ColumnGroupModel with the body ColumnGroupModel, so that corresponding columns are linked, meaning that when a header column corresponds to a body column, properties need only be set on the header column to be used by both, and when columns are reordered in the TableConfigPanel, future changes to that component will allow corresponding columns to be moved together in a single action.

          Outstanding:

          • The groupBy property does not work with the corresponding column feature, due to additional refactoring being necessary
          • TableConfigPanel needs to make use of the new ColumnModel and ColumnGroupModel APIs
          • DataExporter needs to make use of the new ColumnModel and ColumnGroupModel APIs

          branch
          Subversion 38628

          Show
          Mark Collette added a comment - Added ColumnGroupModel, which manages a multi-row model of columns, and provides means for iterating/traversing through that 2D space. Added ColumnModel, which binds the header ColumnGroupModel with the body ColumnGroupModel, so that corresponding columns are linked, meaning that when a header column corresponds to a body column, properties need only be set on the header column to be used by both, and when columns are reordered in the TableConfigPanel, future changes to that component will allow corresponding columns to be moved together in a single action. Outstanding: The groupBy property does not work with the corresponding column feature, due to additional refactoring being necessary TableConfigPanel needs to make use of the new ColumnModel and ColumnGroupModel APIs DataExporter needs to make use of the new ColumnModel and ColumnGroupModel APIs branch Subversion 38628
          Hide
          Mark Collette added a comment -

          Fixed the groupBy issue by refactoring the code to split out what actually needs to be delegated to the header column versus the code that should be delegated to the body column, versus the code that holds it all together.

          branch
          Subversion 38641

          Show
          Mark Collette added a comment - Fixed the groupBy issue by refactoring the code to split out what actually needs to be delegated to the header column versus the code that should be delegated to the body column, versus the code that holds it all together. branch Subversion 38641
          Ken Fyten made changes -
          Fix Version/s EE-3.3.0.GA_P02 [ 11371 ]
          Fix Version/s EE-4.0.0.GA [ 11171 ]
          Hide
          Arturo Zambrano added a comment -

          Added support for header column ordering to ace:dataExporter (CSV format and OuterTableCSVExporter) at revision 38678.

          Show
          Arturo Zambrano added a comment - Added support for header column ordering to ace:dataExporter (CSV format and OuterTableCSVExporter) at revision 38678.
          Hide
          Arturo Zambrano added a comment -

          Fixed issue with not accounting for stacked columns in the header and issue with not skipping column with expansion toggler (in the header) at revision 36680.

          There's only one edge case at the moment that needs to be solved: when a stacked column goes right before a column that spans multiple rows. The headers will appear swapped, only when the row-spanning column is not defined in the row we're processing at the moment.

          Show
          Arturo Zambrano added a comment - Fixed issue with not accounting for stacked columns in the header and issue with not skipping column with expansion toggler (in the header) at revision 36680. There's only one edge case at the moment that needs to be solved: when a stacked column goes right before a column that spans multiple rows. The headers will appear swapped, only when the row-spanning column is not defined in the row we're processing at the moment.
          Hide
          Arturo Zambrano added a comment -

          Fixed edge case with stacked column next to row-spanning column at revision 36681.

          Show
          Arturo Zambrano added a comment - Fixed edge case with stacked column next to row-spanning column at revision 36681.
          Hide
          Mark Collette added a comment -

          TableConfigPanel has been completely redone to use the new ColumnModel and ColumnGroupModel APIs, as well as a new tree-like markup to encapsulate the hierarchy of columns.

          Ordering, naming and visibility are working, while sorting re-coding remains outstanding.

          branch
          Subversion 38684

          Show
          Mark Collette added a comment - TableConfigPanel has been completely redone to use the new ColumnModel and ColumnGroupModel APIs, as well as a new tree-like markup to encapsulate the hierarchy of columns. Ordering, naming and visibility are working, while sorting re-coding remains outstanding. branch Subversion 38684
          Hide
          Mark Collette added a comment - - edited

          Fixed an issue with hiding columns that are non-last in a stack. Depending on which one was hidden, there were either DOM warning or exceptions. One of the instances of this was known as:

          "DataTable rendering glitches when first column in a stack becomes unrendered. Required 2 uses of tableConfigPanel to reproduce."

          branch
          Subversion 38693

          Show
          Mark Collette added a comment - - edited Fixed an issue with hiding columns that are non-last in a stack. Depending on which one was hidden, there were either DOM warning or exceptions. One of the instances of this was known as: "DataTable rendering glitches when first column in a stack becomes unrendered. Required 2 uses of tableConfigPanel to reproduce." branch Subversion 38693
          Hide
          Arturo Zambrano added a comment -

          Added support for header column ordering to ace:dataExporter (XLS, PDF, and XML formats) at revision 38697.

          Show
          Arturo Zambrano added a comment - Added support for header column ordering to ace:dataExporter (XLS, PDF, and XML formats) at revision 38697.
          Hide
          Mark Collette added a comment -

          Added copyright notices to new files, added code to respect the columnGroup rendered value, added automatic adjustment of rendered colspan and column rendering that ripples from tableConfigPanel editing of column renderings that affect above and below in the hierarchy.

          Note: It's now possible to unrender the whole header and all body columns, and have no way to bring back the tableConfigPanel, except for refreshing the page or adding application code to reset the configuration.

          branch
          Subversion 38698

          Show
          Mark Collette added a comment - Added copyright notices to new files, added code to respect the columnGroup rendered value, added automatic adjustment of rendered colspan and column rendering that ripples from tableConfigPanel editing of column renderings that affect above and below in the hierarchy. Note: It's now possible to unrender the whole header and all body columns, and have no way to bring back the tableConfigPanel, except for refreshing the page or adding application code to reset the configuration. branch Subversion 38698
          Hide
          Mark Collette added a comment -
          • Fix to autoadjusting colspan feature, where 1/n stacked unrendered was causing parent to decrement colspan, when it should only when n/n unrendered.
          • TableConfigPanel sorting is now implemented.
          • TableConfigPanel auto adjusting of width of header and columns rows to use the maximum necessary width.

          branch
          Subversion 38704

          Show
          Mark Collette added a comment - Fix to autoadjusting colspan feature, where 1/n stacked unrendered was causing parent to decrement colspan, when it should only when n/n unrendered. TableConfigPanel sorting is now implemented. TableConfigPanel auto adjusting of width of header and columns rows to use the maximum necessary width. branch Subversion 38704
          Hide
          Mark Collette added a comment -

          Made the TableConfigPanel slightly larger, and reduced the length of the header strings, to fix a wrapping problem introduced in the previous commit, and to also allow for longer localised header strings, before we have to make the whole panel auto size itself.

          The introduction of auto unrendering of ancestor and offspring columns introduced an issue whereby it became possible to unrender every column so that there would no longer be any shown DataTable header or body, and therefor no means to summon the TableConfigPanel to make any columns be shown again. Previously, before the TableConfigPanel supported ColumnGroup, this was kept from happening by disabling a specific column's visibility control. Now that disabling is removed, and if there is no rendered header, a simple place-holder header row is rendered containing the TableConfigPanel.

          branch
          Subversion 38706

          Show
          Mark Collette added a comment - Made the TableConfigPanel slightly larger, and reduced the length of the header strings, to fix a wrapping problem introduced in the previous commit, and to also allow for longer localised header strings, before we have to make the whole panel auto size itself. The introduction of auto unrendering of ancestor and offspring columns introduced an issue whereby it became possible to unrender every column so that there would no longer be any shown DataTable header or body, and therefor no means to summon the TableConfigPanel to make any columns be shown again. Previously, before the TableConfigPanel supported ColumnGroup, this was kept from happening by disabling a specific column's visibility control. Now that disabling is removed, and if there is no rendered header, a simple place-holder header row is rendered containing the TableConfigPanel. branch Subversion 38706
          Hide
          Mark Collette added a comment -

          Fixed the issue with IE7 not showing stacked columns in the TableConfigPanel. Also, removed spacing between columns in the TableConfigPanel, that was initially added to help give space when dragging towards the very top or bottom, but was made unnecessary when sortable(

          {containment:'parent'}

          ) was removed.

          branch
          Subversion 38711

          Show
          Mark Collette added a comment - Fixed the issue with IE7 not showing stacked columns in the TableConfigPanel. Also, removed spacing between columns in the TableConfigPanel, that was initially added to help give space when dragging towards the very top or bottom, but was made unnecessary when sortable( {containment:'parent'} ) was removed. branch Subversion 38711
          Hide
          Mark Collette added a comment -

          Using the internal QA test app ( http://localhost:8080/dataTable/views/columnHeaderOrdering.jsf ) there was an issue when following these steps:
          1. Open the TableConfigPanel, click on UPC to sort, click to accept the changes
          2. Click on the Name header to sort
          3. Re-open the TableConfigPanel and try to click on UPC again to sort. It won't work, and most interactions won't either, until you close the TableConfigPanel using any of the 3 buttons, then it will work again.

          The problem was that the DataTable initiated sort change was causing a fractional part of the TableConfigPanel to DOM update, without it's javascript running, due to ids within the body. Replacing the ids with style classes to act as jQuery selectors works fine.

          branch
          Subversion 38712

          Show
          Mark Collette added a comment - Using the internal QA test app ( http://localhost:8080/dataTable/views/columnHeaderOrdering.jsf ) there was an issue when following these steps: 1. Open the TableConfigPanel, click on UPC to sort, click to accept the changes 2. Click on the Name header to sort 3. Re-open the TableConfigPanel and try to click on UPC again to sort. It won't work, and most interactions won't either, until you close the TableConfigPanel using any of the 3 buttons, then it will work again. The problem was that the DataTable initiated sort change was causing a fractional part of the TableConfigPanel to DOM update, without it's javascript running, due to ids within the body. Replacing the ids with style classes to act as jQuery selectors works fine. branch Subversion 38712
          Ken Fyten made changes -
          Link This issue blocks ICE-9055 [ ICE-9055 ]
          Hide
          Mark Collette added a comment -

          Now when any component in a stack has configurable=false, no part of the stack can be used to reorder the stack. Of course, if a sibling column has configurable=true, then it can be reordered, thus effectively reordering the disabled stack... But at least the UI is more clear.

          branch
          Subversion 38713

          Show
          Mark Collette added a comment - Now when any component in a stack has configurable=false, no part of the stack can be used to reorder the stack. Of course, if a sibling column has configurable=true, then it can be reordered, thus effectively reordering the disabled stack... But at least the UI is more clear. branch Subversion 38713
          Hide
          Cruz Miraback added a comment -

          There is an issue with the recent changes for this feature. There is a dependency on having a top level row in the columnGroup with a column that spans the entire width of the table. If this row/column is not present then only the first top level column is shown in the tableConfigPanel. This issue can be reproduced using the test here and removing the 'Track' row/column: http://server.ice:8888/svn/repo/qa/trunk/Regression-Icefaces2/Sparkle/Nightly/dataTable/web/views/columnHeaderOrdering.xhtml

          Show
          Cruz Miraback added a comment - There is an issue with the recent changes for this feature. There is a dependency on having a top level row in the columnGroup with a column that spans the entire width of the table. If this row/column is not present then only the first top level column is shown in the tableConfigPanel. This issue can be reproduced using the test here and removing the 'Track' row/column: http://server.ice:8888/svn/repo/qa/trunk/Regression-Icefaces2/Sparkle/Nightly/dataTable/web/views/columnHeaderOrdering.xhtml
          Hide
          Mark Collette added a comment -

          Fixed the dependency on the completely spanning top header row, which involved two off by one errors in the iterator, which is used by the traverser, which populates the TableConfigPanel.

          branch
          Subversion 38719

          Show
          Mark Collette added a comment - Fixed the dependency on the completely spanning top header row, which involved two off by one errors in the iterator, which is used by the traverser, which populates the TableConfigPanel. branch Subversion 38719
          Hide
          Ken Fyten added a comment -

          With this version it is no longer possible to set focus on or edit the col names in the tableConfigPanel (Firefox only)

          Show
          Ken Fyten added a comment - With this version it is no longer possible to set focus on or edit the col names in the tableConfigPanel (Firefox only)
          Hide
          Ken Fyten added a comment -

          There is also an issue where the button that opens the tableConfigPanel will be duplicated when set to "last-col" and the last column is in a stack (stacked). Only the topmost will be active, but duplicate buttons are rendered.

          Show
          Ken Fyten added a comment - There is also an issue where the button that opens the tableConfigPanel will be duplicated when set to "last-col" and the last column is in a stack (stacked). Only the topmost will be active, but duplicate buttons are rendered.
          Hide
          Mark Collette added a comment -

          Worked around the firefox issue with jquery sortable disableSelection, which was keeping the text fields from being editable. This was not a recent regression.

          http://forum.jquery.com/topic/jquery-ui-sortable-disableselection-firefox-issue-with-inputs

          branch
          Subversion 38720

          Show
          Mark Collette added a comment - Worked around the firefox issue with jquery sortable disableSelection, which was keeping the text fields from being editable. This was not a recent regression. http://forum.jquery.com/topic/jquery-ui-sortable-disableselection-firefox-issue-with-inputs branch Subversion 38720
          Hide
          Mark Collette added a comment -

          Added a check so that when a stack of columns are being rendered in the header, the tableConfigPanel summoning button will only get rendered into the first of the stack.

          branch
          Subversion 38721

          Show
          Mark Collette added a comment - Added a check so that when a stack of columns are being rendered in the header, the tableConfigPanel summoning button will only get rendered into the first of the stack. branch Subversion 38721
          Hide
          Mark Collette added a comment -

          Made auto unrendering of ancestor and offspring columns only run when there is a tableConfigPanel, and it's columnVisibilityConfigurable property is true. This allows applications to work-around the new constraint that this feature relies on the column components' rendered properties not being set to read-only EL expressions.

          branch
          Subversion 38724

          Show
          Mark Collette added a comment - Made auto unrendering of ancestor and offspring columns only run when there is a tableConfigPanel, and it's columnVisibilityConfigurable property is true. This allows applications to work-around the new constraint that this feature relies on the column components' rendered properties not being set to read-only EL expressions. branch Subversion 38724
          Mark Collette made changes -
          Link This issue blocks ICE-9678 [ ICE-9678 ]
          Hide
          Mark Collette added a comment -

          There was an issue found with scrollable dataTable and re-ordering columns, that possibly required stacked columns. The scrollable dataTable uses two tables, one for the header and one for the body that also includes a duplicated header that's usually hidden. There was a bug in the rendering of the duplicated headers, where the dataTable changes its container client id so that child components will use a "dupeSeg" addition to their clientIds, so everything remains unique. The problem is that component properties and fields are not reliably accessible, since their values are stored without the "dupeSeg" but are trying to be accessed with it. In this case, headerColumnOrdering was failing, so the duplicated headers were not re-ordered and didn't match the real headers, so messed up the sizing algorithm. I verified this was the issue by bypassing the stored properties that rely on the clientId, and used EL for columnOrdering and headerColumnOrdering, tying them to bean properties, which fixed the un-ordered rendering problem. The real fix came from adding the ColumnModel to the rendering context, so that nothing it relies on will need to be re-gotten during the duplicated rendering, and it also optimises the rendering speed.

          To duplicate the issue, use the QA Sparkle Nightly dataTable app and the stackedColumnsAlignmentIssue.xhtml page. Bring up the tableConfigPanel, move the stacked seven and eight columns to come between one and two columns. Click the checkmark, and see that the header and body columns do not line up.

          Sparkle/Nightly/dataTable/web/views/stackedColumnsAlignmentIssue.xhtml

          branch
          Subversion 38757

          That didn't actually completely fix the column sizing glitch, since there are actually two problems. The other issue is that a previous commit introduced a regression in the resizing:

          Revision #38718 Committed by art.zambrano at 11/1/13 3:44:20 PM ICE-9576, ICE-9532 backported these fixes to this branch

          With commit 38757 in, and commit 38718 reverted, it then works properly. I verified that it's not the tableConfigPanel's bug by turning on the reorderableColumns property on the dataTable, and using column dragging instead of the tableConfigPanel, and reproduced the issue with commit 38718 in, which doesn't happen with it reverted.

          Show
          Mark Collette added a comment - There was an issue found with scrollable dataTable and re-ordering columns, that possibly required stacked columns. The scrollable dataTable uses two tables, one for the header and one for the body that also includes a duplicated header that's usually hidden. There was a bug in the rendering of the duplicated headers, where the dataTable changes its container client id so that child components will use a "dupeSeg" addition to their clientIds, so everything remains unique. The problem is that component properties and fields are not reliably accessible, since their values are stored without the "dupeSeg" but are trying to be accessed with it. In this case, headerColumnOrdering was failing, so the duplicated headers were not re-ordered and didn't match the real headers, so messed up the sizing algorithm. I verified this was the issue by bypassing the stored properties that rely on the clientId, and used EL for columnOrdering and headerColumnOrdering, tying them to bean properties, which fixed the un-ordered rendering problem. The real fix came from adding the ColumnModel to the rendering context, so that nothing it relies on will need to be re-gotten during the duplicated rendering, and it also optimises the rendering speed. To duplicate the issue, use the QA Sparkle Nightly dataTable app and the stackedColumnsAlignmentIssue.xhtml page. Bring up the tableConfigPanel, move the stacked seven and eight columns to come between one and two columns. Click the checkmark, and see that the header and body columns do not line up. Sparkle/Nightly/dataTable/web/views/stackedColumnsAlignmentIssue.xhtml branch Subversion 38757 That didn't actually completely fix the column sizing glitch, since there are actually two problems. The other issue is that a previous commit introduced a regression in the resizing: Revision #38718 Committed by art.zambrano at 11/1/13 3:44:20 PM ICE-9576 , ICE-9532 backported these fixes to this branch With commit 38757 in, and commit 38718 reverted, it then works properly. I verified that it's not the tableConfigPanel's bug by turning on the reorderableColumns property on the dataTable, and using column dragging instead of the tableConfigPanel, and reproduced the issue with commit 38718 in, which doesn't happen with it reverted.
          Ken Fyten made changes -
          Assignee Mark Collette [ mark.collette ] Arturo Zambrano [ artzambrano ]
          Hide
          Arturo Zambrano added a comment -

          Reverted ICE-9532 and ICE-9576 joint backport, and added ICE-9576 backport only at revision 38761.

          Show
          Arturo Zambrano added a comment - Reverted ICE-9532 and ICE-9576 joint backport, and added ICE-9576 backport only at revision 38761.
          Hide
          Mark Collette added a comment -

          Applications can mistakenly mismatch the header columns and body columns, by having an incorrect number of columns in one, or having a mismatched total of colspan between them. When the code takes the header columns and tries to find the corresponding body columns, it will now attempt to detect this mismatch, and log a severe message to the server log explaining the problem, and then continue to try to build the mismatched dataTable, so that the developer can see the mismatched columns, to help them resolve the issue.

          Example new server log message:

          SEVERE: When processing the header columns at row index 0 (zero based), the header column spanning (3) did not match the body column spanning (2)

          branch
          Subversion Subversion 38760

          Show
          Mark Collette added a comment - Applications can mistakenly mismatch the header columns and body columns, by having an incorrect number of columns in one, or having a mismatched total of colspan between them. When the code takes the header columns and tries to find the corresponding body columns, it will now attempt to detect this mismatch, and log a severe message to the server log explaining the problem, and then continue to try to build the mismatched dataTable, so that the developer can see the mismatched columns, to help them resolve the issue. Example new server log message: SEVERE: When processing the header columns at row index 0 (zero based), the header column spanning (3) did not match the body column spanning (2) branch Subversion Subversion 38760
          Ken Fyten made changes -
          Link This issue blocks ICE-9591 [ ICE-9591 ]
          Ken Fyten made changes -
          Link This issue blocks ICE-9593 [ ICE-9593 ]
          Hide
          Arturo Zambrano added a comment - - edited

          Backported ICE-9532 and ICE-9649 at revision 38788 to solve column misalignment issues, including issue reported by Mark on November 07.

          Show
          Arturo Zambrano added a comment - - edited Backported ICE-9532 and ICE-9649 at revision 38788 to solve column misalignment issues, including issue reported by Mark on November 07.
          Hide
          Mark Collette added a comment -

          Improved the auto-adjust colspan/rendered code, to not try to write to the rendered property of a body column that is already set through EL, or literally set to false. And improved the proxy mechanism to use that same criteria for using the body rendered instead of inheriting the header rendered.

          branch
          Subversion 38805

          Show
          Mark Collette added a comment - Improved the auto-adjust colspan/rendered code, to not try to write to the rendered property of a body column that is already set through EL, or literally set to false. And improved the proxy mechanism to use that same criteria for using the body rendered instead of inheriting the header rendered. branch Subversion 38805
          Mark Collette made changes -
          Link This issue depends on ICE-9692 [ ICE-9692 ]
          Hide
          Mark Collette added a comment -

          Fixed an issue with sorting and reordering in ICE-9692.

          Show
          Mark Collette added a comment - Fixed an issue with sorting and reordering in ICE-9692.
          Hide
          Mark Collette added a comment -

          SEVERE: Error Rendering View[/views/multiRowHeader.xhtml]
          java.lang.NullPointerException
          at org.icefaces.ace.renderkit.CoreRenderer.resolveWidgetVar(CoreRenderer.java:57)
          at org.icefaces.ace.component.datatable.DataTableHeadRenderer.encodeConfigPanelLaunchButton(DataTableHeadRenderer.java:392)
          at org.icefaces.ace.component.datatable.DataTableHeadRenderer.encodeTableHead(DataTableHeadRenderer.java:104)
          at org.icefaces.ace.component.datatable.DataTableRenderer.encodeTable(DataTableRenderer.java:234)
          at org.icefaces.ace.component.datatable.DataTableRenderer.encodeEntirety(DataTableRenderer.java:163)
          at org.icefaces.ace.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:121)
          at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:881)
          at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786)
          at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
          at org.icefaces.impl.renderkit.RendererWrapper.encodeChildren(RendererWrapper.java:49)
          at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:851)
          at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779)
          at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782)
          at org.icefaces.impl.context.DOMPartialViewContext.processPartial(DOMPartialViewContext.java:148)
          at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:973)
          at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779)
          at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:413)
          at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:124)
          at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:286)
          at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
          at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
          at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
          at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)

          Added code to check for presence of TableConfigPanel before trying to render it out, in the case where there are no columns left rendered in which to place the TableConfigPanel button.

          branch
          Subversion 38829

          Show
          Mark Collette added a comment - SEVERE: Error Rendering View [/views/multiRowHeader.xhtml] java.lang.NullPointerException at org.icefaces.ace.renderkit.CoreRenderer.resolveWidgetVar(CoreRenderer.java:57) at org.icefaces.ace.component.datatable.DataTableHeadRenderer.encodeConfigPanelLaunchButton(DataTableHeadRenderer.java:392) at org.icefaces.ace.component.datatable.DataTableHeadRenderer.encodeTableHead(DataTableHeadRenderer.java:104) at org.icefaces.ace.component.datatable.DataTableRenderer.encodeTable(DataTableRenderer.java:234) at org.icefaces.ace.component.datatable.DataTableRenderer.encodeEntirety(DataTableRenderer.java:163) at org.icefaces.ace.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:121) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:881) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786) at javax.faces.render.Renderer.encodeChildren(Renderer.java:168) at org.icefaces.impl.renderkit.RendererWrapper.encodeChildren(RendererWrapper.java:49) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:851) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782) at org.icefaces.impl.context.DOMPartialViewContext.processPartial(DOMPartialViewContext.java:148) at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:973) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779) at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:413) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:124) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:286) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) Added code to check for presence of TableConfigPanel before trying to render it out, in the case where there are no columns left rendered in which to place the TableConfigPanel button. branch Subversion 38829
          Hide
          Mark Collette added a comment -

          Added more diagnostic code to the DOMResponseWriter to better detect precisely where in the DOM that an unclosed element is. The previous code relied on the tag name changing to detect the mis-match. This should help us better track down the source of these log messages:

          WARNING: Missing end-element for: form[id="sub_2:listPgFrm"] (path: #document -> html -> body -> div -> div -> div -> div -> div -> div -> div -> div -> div -> form)

          branch
          Subversion 38839

          Show
          Mark Collette added a comment - Added more diagnostic code to the DOMResponseWriter to better detect precisely where in the DOM that an unclosed element is. The previous code relied on the tag name changing to detect the mis-match. This should help us better track down the source of these log messages: WARNING: Missing end-element for: form [id="sub_2:listPgFrm"] (path: #document -> html -> body -> div -> div -> div -> div -> div -> div -> div -> div -> div -> form) branch Subversion 38839
          Mark Collette made changes -
          Link This issue depends on ICE-9705 [ ICE-9705 ]
          Hide
          Mark Collette added a comment -

          Problem using lazy data model with grouping, since grouping would try to build the group size by iterating through the data until none was available, which could be for millions of row. Added the rows size constraint when appropriate.

          branch
          Subversion 38865

          Show
          Mark Collette added a comment - Problem using lazy data model with grouping, since grouping would try to build the group size by iterating through the data until none was available, which could be for millions of row. Added the rows size constraint when appropriate. branch Subversion 38865
          Mark Collette made changes -
          Link This issue depends on ICE-9715 [ ICE-9715 ]
          Hide
          Mark Collette added a comment -

          Tangentially related to this task, I wanted an example to test lazy loading with the new code, but I had to improve the existing showcase lazy loading example to give it a better data set that properly illustrates functionality.

          branch
          Subversion 39065

          Show
          Mark Collette added a comment - Tangentially related to this task, I wanted an example to test lazy loading with the new code, but I had to improve the existing showcase lazy loading example to give it a better data set that properly illustrates functionality. branch Subversion 39065
          Mark Collette made changes -
          Link This issue depends on ICE-9704 [ ICE-9704 ]
          Ken Fyten made changes -
          Status Open [ 1 ] Resolved [ 5 ]
          Resolution Fixed [ 1 ]
          Ken Fyten made changes -
          Resolution Fixed [ 1 ]
          Status Resolved [ 5 ] Reopened [ 4 ]
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #39439 Tue Dec 17 04:56:40 MST 2013 art.zambrano ICE-9471 backport
          Files Changed
          Commit graph MODIFY /icefaces4/trunk/icefaces/core/src/main/java/org/icefaces/impl/context/DOMResponseWriter.java
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #39444 Tue Dec 17 09:22:49 MST 2013 art.zambrano ICE-9471 backport
          Files Changed
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/datatable/DataTableRenderingContext.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/datatable/SortState.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/datatable/DataTableRenderer.java
          Commit graph ADD /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/column/ProxiedBodyColumn.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/datatable/DataTableDecoder.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/datatable/DataTableFootRenderer.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/datatable/DataTableHeadRenderer.java
          Commit graph ADD /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/column/IProxiableColumn.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/datatable/DataTableRowRenderer.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/datatable/DataTableRendererUtil.java
          Commit graph ADD /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/model/table/DepthFirstHeadTraversal.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/tableconfigpanel/TableConfigPanelRenderer.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/util/JSONBuilder.java
          Commit graph ADD /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/datatable/AutoAdjustRenderedColspan.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/datatable/DataTable.java
          Commit graph ADD /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/model/table/ColumnModel.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/column/Column.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/tableconfigpanel/TableConfigPanel.java
          Commit graph ADD /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/model/table/ColumnGroupModel.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/datatable/DataTableMeta.java
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #39445 Tue Dec 17 09:58:53 MST 2013 art.zambrano ICE-9471 backport
          Files Changed
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/tableconfigpanel/TableConfigPanelMeta.java
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #39446 Tue Dec 17 11:20:03 MST 2013 art.zambrano ICE-9471 backport
          Files Changed
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/resources/icefaces.ace/tableconfigpanel/tableconfigpanel.css
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/resources/icefaces.ace/datatable/datatable.css
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/resources/icefaces.ace/tableconfigpanel/tableconfigpanel.js
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #39451 Wed Dec 18 10:54:25 MST 2013 art.zambrano ICE-9471 backport
          Files Changed
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/dataexporter/OuterTableCSVExporter.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/dataexporter/DataExporterMeta.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/dataexporter/PDFExporter.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/dataexporter/ExcelExporter.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/dataexporter/CSVExporter.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/dataexporter/Exporter.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/dataexporter/XMLExporter.java
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #39452 Wed Dec 18 11:40:02 MST 2013 art.zambrano ICE-9471 backport
          Files Changed
          Commit graph MODIFY /icefaces4/trunk/icefaces/samples/showcase/showcase/src/main/java/org/icefaces/samples/showcase/example/ace/dataTable/Car.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/samples/showcase/showcase/src/main/webapp/resources/examples/ace/dataTable/dataTableConfigPanel.xhtml
          Commit graph MODIFY /icefaces4/trunk/icefaces/samples/showcase/showcase/src/main/java/org/icefaces/samples/showcase/example/ace/dataTable/DataTableBean.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/samples/showcase/showcase/src/main/java/org/icefaces/samples/showcase/example/ace/dataTable/DataTableRowState.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/samples/showcase/showcase/src/main/webapp/resources/examples/ace/dataTable/dataTableLazyLoading.xhtml
          Commit graph MODIFY /icefaces4/trunk/icefaces/samples/showcase/showcase/src/main/java/org/icefaces/samples/showcase/dataGenerators/VehicleGenerator.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/samples/showcase/showcase/src/main/java/org/icefaces/samples/showcase/example/ace/dataTable/SelectableCar.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/samples/showcase/showcase/src/main/java/org/icefaces/samples/showcase/example/ace/dataTable/DataTableConfigPanel.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/samples/showcase/showcase/src/main/java/org/icefaces/samples/showcase/example/ace/dataTable/DataTableLazyLoading.java
          Commit graph ADD /icefaces4/trunk/icefaces/samples/showcase/showcase/src/main/java/org/icefaces/samples/showcase/example/ace/dataTable/DataTableConfigPanelAdvanced.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/samples/showcase/showcase/src/main/resources/org/icefaces/samples/showcase/view/resources/messages.properties
          Commit graph ADD /icefaces4/trunk/icefaces/samples/showcase/showcase/src/main/webapp/resources/examples/ace/dataTable/dataTableConfigPanelAdvanced.xhtml
          Commit graph MODIFY /icefaces4/trunk/icefaces/samples/showcase/showcase/src/main/java/org/icefaces/samples/showcase/example/ace/dataTable/DataTableRowExpansion.java
          Hide
          Arturo Zambrano added a comment -

          Finished backporting enhancements to 4.0 trunk at revision 39452.

          Show
          Arturo Zambrano added a comment - Finished backporting enhancements to 4.0 trunk at revision 39452.
          Hide
          Arturo Zambrano added a comment -

          Finished backporting enhancements to 3.3 EE maintenance branch at revision 39499.

          Show
          Arturo Zambrano added a comment - Finished backporting enhancements to 3.3 EE maintenance branch at revision 39499.
          Arturo Zambrano made changes -
          Status Reopened [ 4 ] Resolved [ 5 ]
          Resolution Fixed [ 1 ]
          Ken Fyten made changes -
          Fix Version/s 4.0 [ 11382 ]
          Ken Fyten made changes -
          Status Resolved [ 5 ] Closed [ 6 ]

            People

            • Assignee:
              Arturo Zambrano
              Reporter:
              Arran Mccullough
            • Votes:
              1 Vote for this issue
              Watchers:
              7 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: