什么JSF组件允许在部分ajax更新中“插入”?

时间:2014-07-10 08:37:31

标签: ajax jsf jsf-2

我想编写一个JSF组件,它只从服务器端检索最新数据,然后将它们附加到客户端的页面上。在jsf.js中,我看到了处理部分更新的不同方法:更新,删除,插入(取决于部分更新后从组件返回的XML)。是否有使用的内置组件?我怎么写自己的?

1 个答案:

答案 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);
            } 
          } 
        } 
      });