Details
-
Type: Improvement
-
Status: Closed
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: 2.0.0
-
Fix Version/s: 2.1-Beta, 3.0, EE-2.0.0.GA_P01
-
Component/s: ACE-Components
-
Labels:None
-
Environment:JSF 2.0.3 ICEfaces 2
-
Assignee Priority:P1
Description
We have a client requirement that an iframe tab in a tabset not be reloaded as the user interacts with the component. The following clientSide="true" configuration is working fine until a new ace:tabPane is dynamically added, at that point the DOM update is returning ALL the existing tabSet content, when ideally it should just be returning the new tab.
I think this is undesirable under normal circumstances as a situation where the user has many tabs with say ice:dataTables holding many items could result in very sluggish performance when adding a new tab.
<ace:tabSet id="tabSet"
clientSide="true"
orientation="bottom"
selectedIndex="#{tabset.visibleTab}"
rendered="#{not empty tabset.tabs}" >
<c:forEach items="#{tabset.tabs}" var="tab">
<ace:tabPane label="#{tab.label}" >
<ui:include src="#{tab.include}" />
</ace:tabPane>
</c:forEach>
</ace:tabSet>
I think this is undesirable under normal circumstances as a situation where the user has many tabs with say ice:dataTables holding many items could result in very sluggish performance when adding a new tab.
<ace:tabSet id="tabSet"
clientSide="true"
orientation="bottom"
selectedIndex="#{tabset.visibleTab}"
rendered="#{not empty tabset.tabs}" >
<c:forEach items="#{tabset.tabs}" var="tab">
<ace:tabPane label="#{tab.label}" >
<ui:include src="#{tab.include}" />
</ace:tabPane>
</c:forEach>
</ace:tabSet>
Issue Links
- depends on
-
ICE-6728 Add client-side cache support for ace:tabPane within a 'clientSide=false'
- Closed
Since we don't currently have dom insert capabilty, but rather dom replace, the trick is to already have rendered a place-holder for future content. For ace:tabSet, we could render some tuned number of future place-holder tabPane root divs, each styled to be hidden. Then, when a tab is added, the first place-holder will be swapped out for an actual tabPane, styled to no longer be hidden. The key is that as tabs are added and removed, they are taken from and returned to the pool of place-holders, so that the dom element child count does not vary, which would cause then all to be dom updated.