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

时间:2015-03-17 10:23:55

标签: jsf primefaces action managed-bean

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

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

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

1 个答案:

答案 0 :(得分:3)

与所有JSF组件the onidle attribute must represent a JavaScript callback上的所有其他on*属性一样,而不是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?