Как избежать повторной оценки EL - PullRequest
2 голосов
/ 25 августа 2010

Я разрабатываю веб-интерфейс со швами / richfaces.

Во многих компонентах есть что-то похожее на

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

В этом случае # {! Complexbean.heavyoperation ()} оценивается дважды.

У меня вопрос: есть ли что-то похожее на операторы if-else, которые я могу использовать на странице, чтобы избежать многократной оценки одного и того же EL (и я бы хотел избежать любого использования JSP-содержимого, т.е.% <% if. ..%>%)?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 25 августа 2010

Я вижу, вы используете Seam.Разве вы не можете просто использовать @Factory в одном из своих бобов?В том же объеме он будет оцениваться только ОДИН РАЗ.Это его цель.

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

А затем ваше мнение:

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

Я думаю, что это намного яснее.Надеюсь, это поможет:)

0 голосов
/ 25 августа 2010

Если у вас нет ничего против jstl, вы можете использовать c: выбрать / c: когда / c: в противном случае конструкция.

...