Почему 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 и, возможно, другую полезную информацию.

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