如何在 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*
属性一样,the onidle
attribute must represent a JavaScript callback 不是 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,请转到此相关答案中发布的备选方案:How to invoke a JSF managed bean on a HTML DOM event using native JavaScript?
我想在 on*
属性中调用托管 bean 操作方法。在我的特殊情况下,如果用户空闲 3 分钟,我需要注销用户,如下所示:
<p:idleMonitor onidle="#{mybean.processTimeOut()}" timeout="180000" />
但是,托管 bean 操作方法会在页面加载时立即调用。这是怎么造成的,我该如何解决?
与所有 JSF 组件上的所有其他 on*
属性一样,the onidle
attribute must represent a JavaScript callback 不是 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,请转到此相关答案中发布的备选方案:How to invoke a JSF managed bean on a HTML DOM event using native JavaScript?