JSF 何时评估 EL 表达式

Posted

技术标签:

【中文标题】JSF 何时评估 EL 表达式【英文标题】:When does JSF evaluate EL expressions 【发布时间】:2014-06-21 06:39:06 【问题描述】:

对于延迟的 EL 表达式,JSF 将在单个请求期间对其进行多次评估。我查看了 JavaEE 教程,上面写着:

对于回发请求,JavaServer Faces 实现评估 生命周期不同阶段的表达式,在此期间 从请求中检索、验证并传播到 客户 bean。

这是否意味着 JSF 将在单个请求中评估 EL 表达式 3 次?这可能是一个潜在的性能问题。

例如,我们可以使用#userList.resultList 表达式检索实体集合。 JSF 评估它 3 次,也就是说,数据库将在一个请求中被查询 3 次。如何避免这种冗余的数据库查询?

谢谢!

【问题讨论】:

它更像是 6 而不是 3。您可以通过只在渲染响应阶段进行数据库查找等主要工作来避免它。 【参考方案1】:

EL 应该使用简单的 getter/setter。不要将业务逻辑放在你的 getter 中,因此 userList.resultList 应该简单地 - 返回在初始化时设置到 bean 中的 resultList。

参考:Why JSF calls getters multiple times

我可以剪切和粘贴并继续讨论这个问题,但是 BalusC 在上面的帖子中解释得非常好

【讨论】:

太棒了,这正是我需要的。谢谢!

以上是关于JSF 何时评估 EL 表达式的主要内容,如果未能解决你的问题,请参考以下文章

结合接缝 3 和 JSF2 复合组件 valueChangeListener 评估 El 表达式的问题

在 JavaScript 文件中混合 JSF EL

如果 jsf 数据表为空,如何显示消息?

Spring EL hello world实例

JBoss 6 上的 JSF 1.2 和 EL 表达式未解决

在JSF EL表达式中连接两个字符串[重复]