【问题标题】:CommandLink primefacesCommandLink primefaces
【发布时间】:2013-05-22 11:04:52
【问题描述】:

我对 p:commandLink 有疑问

这是链接代码

<p:commandLink partialsubmit="true" id="c2aLink" immediate="true" ajax="true" update="generalPanel" action="#{tabularbean.refresh}"/>

问题是单击此链接时,它会重新加载页面,而不仅仅是更新面板。

我只想更新面板而不是重新加载整个页面

注意:我使用 javascript 代码点击此链接

javascript代码:

render: function(options) { var c2aLink = this.findElementWithIdLike(iframe.contentWindow,'c2aLink'); c2aLink.click();},

findElementWithIdLike :function(wind,prefix) {
    return this.findChildWithIdLike2(wind.document.body, prefix);
},

findChildWithIdLike2 :function(node, prefix) {
    if (node && node.id && node.id.indexOf(prefix) >= 0) {
        //match found
        return node;
    }

    //no match, check child nodes
    for (var index = 0; index < node.childNodes.length; index++) {
        var child = node.childNodes[index];
        var childResult = this.findChildWithIdLike2(child, prefix);
        if (childResult) {
            return childResult;
        }
    }
},`

【问题讨论】:

  • 你能贴出javascript代码吗?
  • 我更新了帖子以包含 javascript 代码
  • 当按钮被点击时,它是提交一个 ajax 请求然后刷新超过你想要的,还是完全提交?
  • 如果您在此处发布您的确切用例,我相信会有比您目前尝试的更简洁的方式来触发 ajax 请求。此外,您可能需要确认当前情况不是 click() 函数的默认值

标签: javascript jsf primefaces


【解决方案1】:

您需要调用元素的onclick 属性处理程序,而不是click() 方法。

替换

c2aLink.click();

通过

c2aLink.onclick();

PrimeFaces ajax 内容在 onclick 属性中定义。

请注意,这一切都与 JSF/PrimeFaces 无关。当使用由 JSF/PrimeFaces 生成的相同 HTML 代码时,您会遇到完全相同的问题。将来,如果您使用“普通”HTML 来确定/重现问题而不是 JSF/PrimeFaces,将会更有帮助。如果您在 HTML/JavaScript 上下文中提出问题,您也将有更好的机会更快地获得答案。

【讨论】:

    【解决方案2】:

    partialSubmit 仅在提交表单/表单部分时有效。您可以使用 oncomplete="submit()"; 这是 ajax 请求完成时执行的客户端回调。

    使用:

    process="@this" update="generalPanel"
    

    以防万一您想更新表单使用:

    update="@form"
    

    在这种情况下绝对不需要 javaScript 代码。像 primefaces 这样的 API 已经内置。

    【讨论】:

      猜你喜欢
      • 2013-11-14
      • 2012-08-12
      • 1970-01-01
      • 2015-06-09
      • 2016-08-10
      • 1970-01-01
      • 2013-09-27
      • 2014-12-19
      • 1970-01-01
      相关资源
      最近更新 更多