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

如何在JSF组件的on*属性中调用托管bean操作方法,jsf,primefaces,action,managed-bean,Jsf,Primefaces,Action,Managed Bean,我想在*属性的中调用托管bean操作方法。在我的特殊情况下,如果用户空闲3分钟,我需要注销用户,如下所示: <p:idleMonitor onidle="#{mybean.processTimeOut()}" timeout="180000" /> 但是,托管bean操作方法会在页面加载时立即调用。这是如何导致的,我如何解决它?就像所有JSF组件上的*属性上的所有其他,而不是JSF支持bean操作方法一样。在生成HTML输出期间,*属性上的中的任何EL表达式将立即作为Stri

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

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


但是,托管bean操作方法会在页面加载时立即调用。这是如何导致的,我如何解决它?

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

这就像你在做
。如果您删除了括号
()
,您将面临一个
PropertyNotFoundException
,这也是一个提示,表明它本身是作为值表达式而不是方法表达式进行计算的

为了使用JavaScript调用JSF支持bean方法,您需要一个额外的



如果您不在PrimeFaces上,请前往此相关答案中发布的备选方案:

您希望实现什么?3分钟后是否将用户重定向到特定页面?是否取消会话并显示自定义消息?“注销用户立即登录主页”我不太清楚,你能澄清一下吗?@Mathieu Castes是的,如果用户空闲3分钟,我想将其重定向到登录页面。代码在mainDashboard中提供了它的功能,但它会立即注销用户登录页面并初始化mainDashboard@BalusCafter尝试您的示例这是“error am get XML Parsing error:no element found”,我已经看到了我的问题,我没有在这两个标记之间包含它,非常感谢
<p:idleMonitor onidle="processTimeout()" timeout="180000" /> 
<p:remoteCommand name="processTimeout" action="#{mybean.processTimeOut}" />