Ответ 1
Теги JSTL оцениваются во время построения представления, а не во время рендеринга представления. Вы можете визуализировать его следующим образом: всякий раз, когда дерево представлений создается впервые, все теги JSTL выполняются, и результат представляет собой представление только с компонентами JSF. Всякий раз, когда дерево представления получает визуализированное, все компоненты JSF выполняются, а результат - HTML. Итак: JSF + JSTL не работает синхронно, как вы ожидали от кодирования. Сначала JSTL запускается сверху вниз, передает результат в JSF, а затем JSF снова запускается сверху вниз. Это может привести к неожиданным результатам в JSF-итерациях, таких как UIData, потому что данные строки (в вашем конкретном случае - объект #{item}
) доступны не, когда выполняется JSTL.
Вкратце: используйте JSTL для управления потоком построения дерева компонентов JSF. Используйте JSF для управления потоком генерации HTML-кода.
Вы хотите использовать атрибут rendered
.
<h:outputText value="Missing value" rendered="#{item.state ne 'Finish'}" />
<h:outputLink value="myLink" rendered="#{item.state eq 'Finish'}">
<h:outputText value="Value = #{item.state}" />
</h:outputLink>