如何使用javascript/JQuery调用jsf页面上的隐藏按钮

How to call hidden button on a jsf page with javascript/JQuery

本文关键字:隐藏 按钮 jsf javascript 何使用 JQuery 调用      更新时间:2023-09-26

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

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

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()",但我在服务器端没有捕捉到任何事件。

我似乎是按照其他类似问题的指示来做的,但我缺乏最终结果。

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

隐藏按钮可以使用类似的JavaScript点击

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

但是,在命名容器时应该小心。隐藏按钮必须由<h:form>标记包围,并且其prependid属性应设置为false。否则,您可以访问id为formId:doStuff的按钮。

另请参见

JSF2/PrimeFaces 中的命名容器

无法通过JavaScript 点击隐藏按钮

从javascript调用服务器端方法的方法要简单得多。定义一个p:remoteCommand,Primefaces将创建一个JavaScript函数,您可以从JavaScript函数内部调用该函数。

使用以下内容定义远程命令:

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

然后在beforeunload上调用bean方法,只需使用:

$(window).bind('beforeunload', doStuff);