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

时间:2013-07-24 12:48:21

标签: javascript jquery jsf-2 primefaces

我发现这个问题已经以不同的形式多次提出,但我仍然需要一些帮助,因为无法在示例中得到这个。

我有一个带有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()',但我没有在服务器端捕获任何事件。

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

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

2 个答案:

答案 0 :(得分:2)

可以使用像

这样的JavaScript点击隐藏按钮
document.getElementById('doStuff').click();

但是,您应该注意命名容器。隐藏按钮必须附加<h:form>标记,并且prependid属性应设置为false。否则,您可以访问ID为formId:doStuff的按钮。

另见

Naming Container in JSF2/PrimeFaces

Cannot click hidden button by JavaScript

答案 1 :(得分:1)

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

使用以下命令定义remoteCommand:

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

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

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