繁体   English   中英

如何在JSF组件的on *属性中调用托管bean操作方法

[英]How to invoke a managed bean action method in on* attribute of a JSF component

我想在on*属性中调用托管bean操作方法。 在我的特定情况下,如果用户空闲3分钟,我需要注销用户,如下所示:

<p:idleMonitor onidle="#{mybean.processTimeOut()}" timeout="180000" /> 

但是,在页面加载时会立即调用托管bean操作方法。 这是怎么造成的,我该如何解决?

与所有JSF组件上的所有其他on*属性一样, onidle属性必须表示JavaScript回调 ,而不是JSF支持bean操作方法。 on*属性中的任何EL表达式将在生成HTML输出期间立即作为String值表达式进行求值,期望它们打印(部分)JavaScript代码。

这就像你正在做<h:outputText value="#{mybean.processTimeout()}"> 如果你删除了括号() ,你就会面临一个PropertyNotFoundException ,它也是一个暗示,它被评估为值表达式而不是方法表达式。

要使用JavaScript调用JSF支持bean方法,您需要一个额外的<p:remoteCommand>

<p:idleMonitor onidle="processTimeout()" timeout="180000" /> 
<p:remoteCommand name="processTimeout" action="#{mybean.processTimeOut}" />

如果您不在PrimeFaces上,请转到此相关答案中发布的备选方案: 如何使用本机JavaScript在HTML DOM事件上调用JSF托管bean?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM