Skip to content

Commit 50bd9b8

Browse files
committed
1 parent cf20b82 commit 50bd9b8

File tree

3 files changed

+39
-7
lines changed

3 files changed

+39
-7
lines changed

src/main/java-templates/org/primefaces/component/tree/TreeTemplate.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,14 @@ public boolean isTreeNodeDropped() {
391391
return retValOnDrop;
392392
}
393393

394+
public String getScrollState() {
395+
Map<String,String> params = getFacesContext().getExternalContext().getRequestParameterMap();
396+
String name = this.getClientId() + "_scrollState";
397+
String value = params.get(name);
398+
399+
return value == null ? "0,0" : value;
400+
}
401+
394402
private List<String> filteredRowKeys = new ArrayList<String>();
395403
public List<String> getFilteredRowKeys() {
396404
return filteredRowKeys;

src/main/java/org/primefaces/component/tree/TreeRenderer.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -383,9 +383,11 @@ public void encodeVerticalTree(FacesContext context, Tree tree, TreeNode root) t
383383
writer.endElement("ul");
384384

385385
if (selectable) {
386-
encodeSelectionHolder(context, tree);
386+
encodeStateHolder(context, tree, clientId + "_selection", tree.getSelectedRowKeysAsString());
387387
}
388-
388+
389+
encodeStateHolder(context, tree, clientId + "_scrollState", tree.getScrollState());
390+
389391
writer.endElement("div");
390392
}
391393

@@ -435,7 +437,7 @@ protected void encodeHorizontalTree(FacesContext context, Tree tree, TreeNode ro
435437
}
436438

437439
if (selectionMode != null) {
438-
encodeSelectionHolder(context, tree);
440+
encodeStateHolder(context, tree, clientId + "_selection", tree.getSelectedRowKeysAsString());
439441
}
440442

441443
writer.endElement("div");
@@ -806,17 +808,15 @@ protected void encodeIcon(FacesContext context, UITreeNode uiTreeNode, boolean e
806808
writer.endElement("span");
807809
}
808810

809-
protected void encodeSelectionHolder(FacesContext context, Tree tree) throws IOException {
811+
protected void encodeStateHolder(FacesContext context, Tree tree, String id, String value) throws IOException {
810812
ResponseWriter writer = context.getResponseWriter();
811813

812-
String id = tree.getClientId(context) + "_selection";
813-
814814
writer.startElement("input", null);
815815
writer.writeAttribute("type", "hidden", null);
816816
writer.writeAttribute("id", id, null);
817817
writer.writeAttribute("name", id, null);
818-
writer.writeAttribute("value", tree.getSelectedRowKeysAsString(), null);
819818
writer.writeAttribute("autocomplete", "off", null);
819+
writer.writeAttribute("value", value, null);
820820
writer.endElement("input");
821821
}
822822

src/main/resources/META-INF/resources/primefaces/tree/tree.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,8 @@ PrimeFaces.widget.VerticalTree = PrimeFaces.widget.BaseTree.extend({
465465
this.initDroppable();
466466
}
467467
}
468+
469+
this.restoreScrollState();
468470
},
469471

470472
bindEvents: function() {
@@ -585,6 +587,10 @@ PrimeFaces.widget.VerticalTree = PrimeFaces.widget.BaseTree.extend({
585587
}
586588
});
587589
}
590+
591+
this.jq.on('scroll.tree', function(e) {
592+
$this.saveScrollState();
593+
});
588594

589595
this.bindKeyEvents();
590596
},
@@ -1580,6 +1586,24 @@ PrimeFaces.widget.VerticalTree = PrimeFaces.widget.BaseTree.extend({
15801586
};
15811587

15821588
PrimeFaces.ajax.Request.handle(options);
1589+
},
1590+
1591+
restoreScrollState: function() {
1592+
var scrollState = this.scrollStateHolder.val(),
1593+
scrollValues = scrollState.split(',');
1594+
1595+
this.jq.scrollLeft(scrollValues[0]);
1596+
this.jq.scrollTop(scrollValues[1]);
1597+
},
1598+
1599+
saveScrollState: function() {
1600+
var scrollState = this.jq.scrollLeft() + ',' + this.jq.scrollTop();
1601+
1602+
this.scrollStateHolder.val(scrollState);
1603+
},
1604+
1605+
clearScrollState: function() {
1606+
this.scrollStateHolder.val('0,0');
15831607
}
15841608

15851609
});

0 commit comments

Comments
 (0)