我发现这个问题已经以不同的形式多次提出,但我仍然需要一些帮助,因为无法在示例中得到这个。
我有一个带有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()',但我没有在服务器端捕获任何事件。
我似乎正在按照其他类似问题的指示行事,但我缺乏最终结果。
任何帮助都将不胜感激,谢谢。
答案 0 :(得分:2)
可以使用像
这样的JavaScript点击隐藏按钮document.getElementById('doStuff').click();
但是,您应该注意命名容器。隐藏按钮必须附加<h:form>
标记,并且prependid
属性应设置为false
。否则,您可以访问ID为formId:doStuff
的按钮。
另见
答案 1 :(得分:1)
从javascript调用服务器端方法有一种更简单的方法。定义p:remoteCommand
,Primefaces将创建一个JavaScript函数,您可以在JavaScript函数内部调用它。
使用以下命令定义remoteCommand:
<p:remoteCommand name="doStuff" action="#{myBean.callMethod()}"/>
然后在beforeunload
上调用bean方法只需使用:
$(window).bind('beforeunload', doStuff);