Как избежать повторной оценки 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: иначе конструкция.