如何避免重复评估EL

时间:2010-08-25 05:40:38

标签: 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的东西,即%&lt;%if ...%&gt;%)?

谢谢!

2 个答案:

答案 0 :(得分:5)

我发现你正在使用Seam。你不能只在你的一个支持bean中使用@Factory吗?在相同的范围内,它仅被评估为ONCE。这是它的目的。

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

然后你的观点:

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

我认为这更加清晰。希望有所帮助:)

答案 1 :(得分:0)

如果你没有反对jstl,你可以使用c:choose / c:when / c:否则构造。

相关问题