[英]How to call hidden button on a jsf page with javascript/JQuery
我发现这个问题已经以不同的形式被问过好几次了,但是我仍然需要一些帮助,因为不能像例子中那样。
我有一个带有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()”,但是我没有在服务器端捕获任何事件。
我似乎正在按照其他类似问题中的指示进行操作,但是我缺乏最终结果。
任何帮助,将不胜感激,谢谢。
可以使用JavaScript之类的工具来单击“隐藏”按钮
document.getElementById('doStuff').click();
但是,在命名容器时应格外小心。 隐藏的按钮必须由<h:form>
标记括起来,并且其prependid
属性应设置为false
。 否则,您可以使用id formId:doStuff
访问按钮。
也可以看看
有一种从javascript调用服务器端方法的简单得多的方法。 定义一个p:remoteCommand
,Primefaces将创建一个JavaScript函数,您可以从JavaScript函数内部调用它。
使用以下命令定义remoteCommand:
<p:remoteCommand name="doStuff" action="#{myBean.callMethod()}"/>
然后使用beforeunload
调用bean方法:
$(window).bind('beforeunload', doStuff);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.