Теги 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>
См. Также: