我想在 on*
属性中调用托管 bean 操作方法。在我的特定情况下,如果用户空闲 3 分钟,我需要注销用户,如下所示:
<p:idleMonitor onidle="#{mybean.processTimeOut()}" timeout="180000" />
但是,当页面加载时,会立即调用托管 bean 操作方法。这是怎么造成的以及如何解决?
最佳答案
与其他所有一样on*
所有 JSF 组件的属性,the onidle
attribute must represent a JavaScript callback ,不是 JSF 支持 bean 操作方法。 on*
中的任何 EL 表达式属性将立即被评估为 String
生成 HTML 输出期间的值表达式,期望它们打印(部分)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,请前往此相关答案中发布的替代方案:How to invoke a JSF managed bean on a HTML DOM event using native JavaScript?
关于jsf - 如何在 JSF 组件的 on* 属性中调用托管 bean 操作方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29096643/