John
John

Reputation: 660

How to avoid repeat evaluation of EL

I'm developing a web interface with seam/richfaces.

Alot of the components has something akin to

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

In this case the #{!complexbean.heavyoperation()} gets evaluated twice.

My question is, is there anything similar to if-else statements I can use in the page to avoid these multiple evaluation of the same EL (and I would like to avoid any uses of JSP stuff, i.e. %<% if ... %>% )?

Thanks!

Upvotes: 2

Views: 171

Answers (2)

Petar Minchev
Petar Minchev

Reputation: 47373

I see you are using Seam. Can't you just use a @Factory in one of your backing beans? In the same scope it will be evaluated only ONCE. This is its purpose.

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

And then your view:

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

I think this is much clearer. Hope that helps:)

Upvotes: 5

spbfox
spbfox

Reputation: 949

If you have nothing against jstl, you can use c:choose/c:when/c:otherwise construction.

Upvotes: 0

Related Questions