Почему h:link value вызывает метод bean, когда элемент управления не отображается?
У меня есть это на моей странице JSF
<h:link rendered="false" value="${mybean.status}" />
Элемент управления не отображается, но он по-прежнему вызывает getStatus()
метод в mybean
, Зачем?
Проблема, кажется, только с value
атрибут, потому что если я включу href="${mybean.url}"
затем getUrl()
метод не вызывается.
Я использую шлейф TomEE 7.04, который поставляется с Mojarra 2.2.12.
1 ответ
Как говорится в документации о rendered
атрибут:
Флаг, указывающий, должен ли этот компонент отображаться (во время фазы ответа визуализации) или обрабатываться при любой последующей отправке формы.
Это означает, что rendered
атрибут обрабатывается на последнем этапе жизненного цикла (Render Response Phase
) в то время как значение компонента было установлено во время Update model values Phase
, В случае нового (GET) запроса он устанавливается также в Render Response Phase
но явно до проверки rendered
приписывать. И установка значения компонента означает вызов геттера.
Здесь нет href
атрибут в h:link
вот почему в этом случае не был вызван геттер.
Как обходной путь, вы можете обернуть h:link
в f:subview
который использует визуализированный атрибут на более раннем этапе.
<f:subview rendered="false">
<h:link rendered="false" value="${mybean.status}" />
</f:subview>
Вы можете посмотреть на этот вопрос, его ответ и комментарии, есть ссылки на жизненный цикл JSF и, возможно, другую полезную информацию.