java - 如何避免重复评估 EL

标签 java seam richfaces

我正在使用 seam/richfaces 开发一个 Web 界面。

很多组件都有类似的东西

<h:panelGrid rendered="#{complexbean.heavyoperation()}">
    ...
</h:panelGrid>
<h:panelGrid rendered="#{!complexbean.heavyoperation()}">
    ...
</h:panelGrid>

在这种情况下,#{!complexbean.heavyoperation()} 被评估两次。

我的问题是,是否可以在页面中使用类似于 if-else 语句的内容来避免对同一 EL 进行多次求值(并且我想避免使用任何 JSP 内容,即 %<% if 。 .. %>% )?

谢谢!

最佳答案

我发现您正在使用Seam。你不能在你的支持bean之一中使用@Factory吗?在相同范围内,只会评估一次。这就是它的目的。

@Factory("operation")
public bool heavyComputation() {
    return true;
}

然后你的观点:

<h:panelGrid rendered="#{!operation}">
    ...
</h:panelGrid>
<h:panelGrid rendered="#{!operation}">
    ...
</h:panelGrid>

我认为这更清楚了。希望有帮助:)

关于java - 如何避免重复评估 EL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3563120/

相关文章:

java - 如何在 Spring 中抽象出 java.time.Clock 用于测试目的

java - 如何将 Spring bean 注入(inject)到 Seam 上下文中?

java - 如何合并同一个非常大的项目的2个版本

java - 用于 Seam 开发的 Eclipse 插件

java - 如何在加载时隐藏 RichFaces 组件?

javascript - 数据表对每行特定单元格求和

jsf - 为什么在 jsf 中使用任何 a4j 元素添加到页面代码第二个 body 和 head 标签?

java - 如何使用 com.sun 的包

java - php exec() 不刷新 Path 环境变量

java - 连接 BassBoost 时 MediaPlayer 不播放 - 错误 (-22, 0)