我想编写一个JSF组件,它只从服务器端检索最新数据,然后将它们附加到客户端的页面上。在jsf.js中,我看到了处理部分更新的不同方法:更新,删除,插入(取决于部分更新后从组件返回的XML)。是否有使用的内置组件?我怎么写自己的?
答案 0 :(得分:0)
好的,以防有人发现它有用......
我不认为Mojarra除了替换组件渲染内容之外还支持任何其他类型的更新,您可能需要PrimeFaces或类似的一些更高级的控件。我最后做的是“劫持”ajax响应并重新构造XML节点以强制jsf.js在我的控件上执行“插入”:
jsf.ajax.addOnEvent(function (data) {
if (data.status === "complete") {
var doc = data.responseXML;
if (doc.firstChild.nodeName === "partial-response"
&& doc.firstChild.firstChild.nodeName === "changes") {
//we are dealing with proper response
var changes = doc.firstChild.firstChild;
var update = changes.firstChild;
if (update.nodeName === "update") {
changes.removeChild(update);
var insert = doc.createElement("insert");
insert.setAttribute("id", update.getAttribute("id"));
changes.appendChild(insert);
var after = doc.createElement("after");
after.setAttribute("id", update.getAttribute("id"));
insert.appendChild(after);
after.appendChild(update.firstChild);
}
}
}
});