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

标签 jsf primefaces action managed-bean

我想在 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/

相关文章:

javascript - 如何在javascript中的switch case中插入if?

java - 在将页面提交到服务器之前检查字段值的验证

jsf - 命令按钮使用 FlashScope 参数打开新选项卡

css - 更改 panelGrid 第一列的样式

java - onRowSelect(SelectEvent event) 方法

primefaces - 如何在 pe :gChart 的工具提示中显示绝对值

validation - JSF 跳过必需验证而不立即 = true

jsf - Primefaces 更改图标从 p :rowEditor

audio - 使用SceneKit中的键在节点上停止声音作为 Action

swift - 按下按钮(快速代码)时如何更改为约束前后?