gpt4 book ai didi

java - JSF 更新 primefaces 树子级

转载 作者:太空宇宙 更新时间:2023-11-04 07:59:56 25 4
gpt4 key购买 nike

我想更新 primefaces 树的子树,而不从服务器拉动整个树。

我可以更新整个树,但不能特定节点的子节点......

编辑:

这是我的代码示例:

<p:tree value="#{cc.tree}" var="wrapper" id="tree" widgetVar="tree" styleClass="commentTree-#{cc.id}">
<p:treeNode id="treeNode" styleClass="treenode-#{wrapper.id}">
Hallo: #{wrapper.text}
</p:treeNode>
</p:tree>

现在我想更新特定的树节点。

function findIDbySelector(selector) {
return $(selector).first().attr('id');
}

function updateComponent(clientID) {
var ajax_json = {};
ajax_json['source'] = '#{cc.id}';
ajax_json['update'] = clientID;

PrimeFaces.ajax.AjaxRequest(ajax_json);
}

[...]

updateComponent(findIDbySelector('.treenode-1'));

正如我所说,我可以更新整个树,但我只想更新单个 Treenode。

(代码可能包含错误/拼写错误,因为它被精简了)

最佳答案

我爬行了一些 primefaces 源代码,发现它们支持加载子项,这对我来说足够了(我可以将节点的内容包装到面板中并更新它和子项)。

为了更新子项,我修改了 primefaces Expandnode 方法:

function loadNodes(tree, c) {
var a = tree;
if (tree.cfg.dynamic) {
if (tree.cfg.cache && c.children(".ui-treenode-children").children().length > 0) {
tree.showNodeChildren(c);
return
}
if (c.data("processing")) {
PrimeFaces.debug("Node is already being expanded, ignoring expand event.");
return
}
c.data("processing", true);
var b = {
source: tree.id,
process: tree.id,
update: tree.id,
formId: tree.cfg.formId
};
b.onsuccess = function (j) {
var g = $(j.documentElement),
h = g.find("update");
for (var e = 0; e < h.length; e++) {
var l = h.eq(e),
k = l.attr("id"),
f = l.text();
if (k == a.id) {
c.children(".ui-treenode-children").html(f);
a.showNodeChildren(c)
} else {
PrimeFaces.ajax.AjaxUtils.updateElement.call(tree, k, f)
}
}
PrimeFaces.ajax.AjaxUtils.handleResponse.call(tree, g);
return true
};
b.oncomplete = function () {
c.removeData("processing")
};
b.params = [{
name: tree.id + "_expandNode",
value: a.getRowKey(c)
}];
if (tree.hasBehavior("expand")) {
var d = tree.cfg.behaviors.expand;
d.call(tree, c, b)
} else {
PrimeFaces.ajax.AjaxRequest(b)
}
} else {
tree.showNodeChildren(c);
tree.fireExpandEvent(c)
}
}

调用示例可以是:

loadNodes(tree, $('#j_idt62\\:tree\\:0'));

其中 tree 是 p:tree 的 WidgetVar

关于java - JSF 更新 primefaces 树子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13000870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com