Details
-
Type: Bug
-
Status: Closed
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: EE-3.3.0.GA_P05
-
Fix Version/s: 4.3, EE-3.3.0.GA_P06
-
Component/s: ACE-Components
-
Labels:None
-
Environment:ace
-
Support Case References:Support Case 14262:- https://icesoft.my.salesforce.com/5000g00001pJ3nK?srPos=0&srKp=500
-
Affects:Compatibility/Configuration
-
Workaround Exists:Yes
-
Workaround Description:Temporarily conceal the contents of the table body when the page is loading, as explained by the comment below.
Description
as well as attached document of screen shot.
When removing scrollable="true" all is good.
-
Hide
- SC14260.war
- 13.70 MB
- Judy Guglielmin
-
- META-INF/MANIFEST.MF 0.1 kB
- index.xhtml 2 kB
- WEB-INF/classes/DataTableBean.class 1 kB
- WEB-INF/classes/TestController.class 1.0 kB
- WEB-INF/classes/Person.class 2 kB
- WEB-INF/classes/TableObject.class 0.9 kB
- WEB-INF/classes/Main.class 2 kB
- WEB-INF/.../icefaces-ee-ace-3.3.0.GA_P05.jar 6.19 MB
- WEB-INF/lib/commons-logging-1.1.jar 52 kB
- WEB-INF/.../icefaces-ee-compat-3.3.0.GA_P05.jar 4.18 MB
- WEB-INF/lib/jsf-impl-2.1.29-04.jar 1.92 MB
- WEB-INF/lib/commons-digester-1.8.jar 140 kB
- WEB-INF/lib/commons-collections-3.2.jar 558 kB
- WEB-INF/lib/icepush-ee-3.3.0.GA_P05.jar 384 kB
- WEB-INF/lib/icefaces-ee-3.3.0.GA_P05.jar 638 kB
- WEB-INF/lib/commons-beanutils-1.8.0.jar 226 kB
- WEB-INF/lib/jsf-api-2.1.29-04.jar 622 kB
- WEB-INF/web.xml 0.8 kB
- home.xhtml 92 kB
- META-INF/maven/.../pom.xml 2 kB
- META-INF/maven/.../pom.properties 0.1 kB
-
- DataTable Large DataSet Issue.docx
- 253 kB
- Judy Guglielmin
-
Hide
- SC_14262_datatableTest.zip
- 15 kB
- Judy Guglielmin
-
- datatableTest/.classpath 0.8 kB
- datatableTest/.project 0.9 kB
- datatableTest/.settings/.jsdtscope 0.6 kB
- datatableTest/.../org.eclipse.jdt.core.prefs 0.4 kB
- datatableTest/.../org.eclipse.wst.common.component 0.5 kB
- datatableTest/.../org.eclipse.wst.common.project.facet.core.xml 0.3 kB
- datatableTest/.../org.eclipse.wst.jsdt.ui.superType.container 0.0 kB
- datatableTest/.../org.eclipse.wst.jsdt.ui.superType.name 0.0 kB
- datatableTest/build/.../DataTableBean.class 1 kB
- datatableTest/build/.../vivek/Person.class 2 kB
- datatableTest/build/.../TestController.class 1 kB
- datatableTest/src/.../DataTableBean.java 1 kB
- datatableTest/src/com/.../vivek/Person.java 1 kB
- datatableTest/src/.../TestController.java 0.6 kB
- datatableTest/WebContent/home.xhtml 92 kB
- datatableTest/WebContent/.../MANIFEST.MF 0.0 kB
- datatableTest/WebContent/WEB-INF/web.xml 2 kB
Issue Links
- blocks
-
ICE-11381 Scrollable ace:dataTable, conceal body table while resizeScrolling() calculations take place
- Closed
Activity
- All
- Comments
- History
- Activity
- Remote Attachments
- Subversion
What is being seen is not a blur effect or anything like that. When a scrollable table is loaded, it goes through several positioning calculations to align the headers to the body columns. For a brief moment all body columns lose their original widths and thus they all appear crammed in the viewport width, while each of them gets its specific width that will align it to its corresponding header. This situation is only visible on tables that have a high number of columns and that are much wider than the viewport. The only work around is to temporarily conceal the table body, so that the table appears blank while all these calculations take place. After all columns have their correct widths set, then the table contents are shown again all aligned. This can be accomplished with the following client side code:
1. Add styleClass="conceal-body-contents" to the ace:dataTable component.
2. Add the following <style> element in the header of the page.
<style type="text/css">
.conceal-body-contents .ui-datatable-scrollable-body .ui-widget-content {
visibility: hidden;
}
</style>
3. Add an id to the ace:dataTable component and to its parent h:form, so we can have a predictable client id for the table. In this example, we simply set them to 'table' and 'form', respectively.
4. Add the following <script> element at the end of the page.
<script type="text/javascript">
setTimeout(function(){
ice.ace.jq(ice.ace.escapeClientId('form:table')).removeClass('conceal-body-contents');
}, 1000);
</script>
5. Don't forget to set the ace:dataTable component to scrollable="true" to actually test this workaround.
So, what this code does is to set the body table to invisible. However, it still takes space, so that our code can do all the alignment calculations correctly. After these calculations are finished, we remove the style class that caused the body table to be invisible, and, thus, the table is finally revealed all aligned correctly.
There's no hook to execute this code right after all the alignment calculations, so we assume they will take no longer than one second, which is a conservative assumption.
I verified that this situation only happens when loading the page and not when resizing the window.
r51184: removed style class used by scrollable body table that contained 'table-layout:fixed;', since it was causing all cells to be crammed into the viewpoert width. Moreover, it's not necessary, since the table itself receives the styling 'table-layout:auto;' in its style attribute when doing the resizeScrolling() calculations
It turns out that having 'table-layout:fixed;' was causing the issue, and it was caused from the moment the HTML was loaded, not when performing the resizeScrolling() calculations. It doesn't seem to be necessary at all, since that styling is overridden by 'table-layout:auto;' on the style attribute of the table.
r52186: committed fix to 4.0 trunk
test app use ...SC14260\home.xhtml