[英]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.