使用 Primefaces JavaScript 在服务器上的 bean 上调用 JSF 方法
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4797505/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Using Primefaces JavaScript to call a JSF method on a bean on the server
提问by Mark Stang
In the Primefaces User Guide it shows examples of how to make AJAX calls to the server
在 Primefaces 用户指南中,它显示了如何对服务器进行 AJAX 调用的示例
PrimeFaces.ajax.AjaxRequest('/myapp/createUser.jsf',
{
formId: 'userForm',
oncomplete: function(xhr, status) {alert('Done');}
});
What I can't figure out is how to call a particular method. My goal is to invalidate the session from the client using JavaScript.
我想不通的是如何调用特定的方法。我的目标是使用 JavaScript 使来自客户端的会话无效。
回答by Danubian Sailor
RemoteCommandis a nice way to achieve that because it provides you a JavaScript function that does the stuff (calling backing bean, refreshing, submitting a form etc., everything that command link can do).
RemoteCommand是实现这一目标的好方法,因为它为您提供了一个 JavaScript 函数来执行这些操作(调用支持 bean、刷新、提交表单等,命令链接可以执行的所有操作)。
From PrimeFaces 3.4 documentation:
<p:remoteCommand name="increment" actionListener="#{counter.increment}"
out="count" />
<script type="text/javascript">
function customFunction() {
//your custom code
increment(); //makes a remote call
}
</script>
回答by wrschneider
What I've typically done is put a hidden p:commandLink on the page, then have Javascript call the click() event on it.
我通常所做的是在页面上放置一个隐藏的 p:commandLink,然后让 Javascript 在其上调用 click() 事件。
<p:commandLink id="hiddenLink"
actionListener="#{bean.methodToInvoke}" style="display:none"/>
Then
然后
$('#hiddenLink').click();
回答by BalusC
Do it in the @PostConstruct
method of the request scoped bean which is associated with the requsted JSF page by EL like #{bean}
.
@PostConstruct
在请求范围 bean的方法中执行此操作,该bean 与 EL 请求的 JSF 页面相关联,例如#{bean}
。
@ManagedBean
@RequestScoped
public class Bean {
@PostConstruct
public void init() {
// Here.
}
}
Unrelated to the question, I only wonder why you would ever do it that way? JSF/PrimeFaces offers much nicer ways using <f:ajax>
and <p:ajax>
and consorts.
与问题无关,我只是想知道你为什么会那样做?JSF/PrimeFaces 提供了更好的使用<f:ajax>
and<p:ajax>
和 consorts 的方法。
Is it the intent to run this during Window's unload
or beforeunload
events? If so, then I have to warn you that this is not reliable. It's dependent on the browser whether such a request will actually reach the server or not. More than often it won't. Use it for pure statistical or premature cleanup purposes only, not for sensitive business purposes.
是否有意在 Windowunload
或beforeunload
事件期间运行它?如果是这样,那么我必须警告您,这是不可靠的。这种请求是否会真正到达服务器取决于浏览器。更多时候它不会。仅将其用于纯粹的统计或过早清理目的,而不是用于敏感的业务目的。