0

我发现这个问题已经以不同的形式被问过好几次了,但我仍然需要一些帮助,因为不能像示例中那样得到这个。

我有一个带有 PrimeFaces 的 JSF 2 页面,它包含以下隐藏按钮,我需要从 javascript 在 pageUnLoad 上调用该按钮。

JSF 有:

// Supposed to be hidden eventually
<h:commandButton id="doStuff" action="#{myBean.callMethod()}" />

javascript有:

var stuff = new Object();

$(window).bind('beforeunload', function() {
    stuff.doStuff();
});

stuff.doStuff = function() {
    // var hidden = $("#doStuff"); // Incorrect
    var hidden = document.getElementById("formId:doStuff"); // Correct
    if (hidden === undefined) {
            // Some logging
    } else {
        hidden.click();
    }
}

managedBean 有:

@ManagedBean(name = "myBean")
@RequestScoped
public class MyBean {
    public void callMethod() {
        // Do stuff
    }
}

通过调试,我可以看到手动单击按钮时,它会正确触发事件。我还能够验证 JavaScript 是否被正确调用,它“似乎”找到了元素,并为其执行了“.click()”,但我没有在服务器端捕获任何事件。

我似乎正在按照其他类似问题的指示这样做,但我缺乏最终结果。

任何帮助将不胜感激,谢谢。

4

2 回答 2

2

可以使用 JavaScript 来单击隐藏按钮,例如

document.getElementById('doStuff').click();

但是,您应该小心命名容器。隐藏按钮必须用<h:form>标签括起来,prependid并且应该设置它的属性false。否则,您可以使用 id 访问按钮formId:doStuff

也可以看看

JSF2/PrimeFaces 中的命名容器

无法通过 JavaScript 单击隐藏按钮

于 2013-07-24T14:56:28.440 回答
1

有一种更简单的方法可以从 javascript 调用服务器端方法。定义 ap:remoteCommand和 Primefaces 将创建一个 JavaScript 函数,您可以从 JavaScript 函数内部调用它。

使用以下内容定义 remoteCommand:

<p:remoteCommand name="doStuff" action="#{myBean.callMethod()}"/>

然后调用 bean-methodbeforeunload只需使用:

$(window).bind('beforeunload', doStuff);
于 2013-07-24T13:01:04.607 回答