Как избежать повторной оценки EL

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

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

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

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

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

Спасибо!

2 ответа

Решение

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

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

И тогда ваше мнение:

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

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

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

Другие вопросы по тегам