Почему между страницей jsf и управляемым компонентом метод getter вызывается дважды - PullRequest
5 голосов
/ 07 мая 2010

У меня есть страница jsf с формой, в которой есть выходной текст. Значение компонента outputtext вызывается из базового компонента (или управляемого компонента). Я знаю, когда кодирую это как # {MyBean.myString} Jsf переименовывает его и вызывает метод getMyString (). Как ни странно, когда я ставлю точку останова на метод getter этого компонента, я вижу, что он вызывается дважды во время рендеринга страницы. Выходной текст имеет формат h: и является единственным компонентом, который связан с бэк-бином. Я имею в виду, что это настолько странно, что jsf должен получить значение при первом обращении к методу getter, однако он должен дважды перейти к методу getter. Можете ли вы объяснить, в чем причина такого поведения в jsf?

Любая помощь будет оценена, С наилучшими пожеланиями, Барис

1 Ответ

16 голосов
/ 07 мая 2010

Получатель, как само его самоописание уже существует, просто с чистой целью получить данных. JSF не кэширует эти данные. Это будет называть это всякий раз, когда это необходимо. Стоимость вызова геттера на практике ничтожна - если вы не делаете что-то большее, чем возвращение данных, например, при каждом обращении к БД эту логику следует затем убрать из геттера или превратить в ленивую загрузку.

В случае отправки формы первый вызов get обычно запускается на этапе проверки, чтобы проверить, есть ли какое-либо начальное значение, чтобы JSF мог обработать событие изменения значения. Второй вызов обычно выполняется во время фазы ответа рендеринга для отображения значения модели в представлении.

Вы также можете найти эту статью полезной, чтобы узнать больше о жизненном цикле JSF. этот ответ может оказаться полезным для получения дополнительной информации о способах предварительной обработки / инициализации в компоненте поддержки.

...