Есть ли элегантный способ обработки чека, очень похожий на блок if else? - PullRequest
2 голосов
/ 10 августа 2010

В следующем сценарии условие «hasA» проверяется дважды, есть ли способ имитировать это очень похоже на блок if / else, чтобы условие оценивалось только один раз

            <s:decorate template="/layout/display.xhtml">
                <h:outputText value="Print A." rendered="#{hasA}"/>
                <h:outputText value="Print B." rendered="#{!hasA}"/>
            </s:decorate>

Ответы [ 2 ]

6 голосов
/ 10 августа 2010

Вы можете записать условие в атрибуте значения с помощью выражения EL

 <h:outputText value="#{hasA ? 'Print A.' : 'Print B.'}" />
1 голос
/ 10 августа 2010

Чтобы обойти проблему, вы можете убедиться, что получатель не выполняет никаких сложных действий дважды или в основном возвращает логическое значение. Вы также должны убедиться, что получатель имеет значение не имеет значения : повторный вызов должен дать тот же результат. Для этого вы можете либо

  1. Лениво вычислите логическое значение и сохраните его во временном поле, чтобы во второй раз возвращалось предварительно вычисленное значение.
  2. Измените логику так, чтобы действие, которое привело бы к изменению логического значения, действительно обновило логическое поле, а получатель / установщик действительно был просто получателем / установщиком и ничего не вычислял.

Объяснение не кристально ясно, но вы должны увидеть идею. Я не вижу ничего плохого в том, чтобы простой геттер оценивался несколько раз.

...