<c:if тест>, кажется, всегда оценивает верный в JSF2 Facelets

Я использую JSF2 на Facelets.

Я определяю <ui:param> на странице:

<ui:composition template="/WEB-INF/templates/ui.xhtml"
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:ui="http://java.sun.com/jsf/facelets"
>
  <ui:param name="title" value="OnAir WebDemo" />
  ...
</ui:composition>

в ui.xhtml шаблон я имею:

<html
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:c="http://java.sun.com/jstl/core"
>
  <c:if test="#{not empty title}">
    <h1>#{title}</h1>
  </c:if>
</html>

Однако <c:if test> кажется, всегда оценивает true также если <ui:param> не указан. Как я могу изменить код так, чтобы <c:if test> на самом деле оценит false когда <ui:param> не указан?

10
задан BalusC 18 July 2014 в 07:53
поделиться

2 ответа

Недопустимое пространство имен XML.Это должно быть

xmlns:c="http://java.sun.com/jsp/jstl/core"

Да, как ни странно, с частью / jsp в URI! Без / jsp работает только в Facelets 1.x для JSF 1.x. Если вы проверили сгенерированный вывод HTML в веб-браузере, вы также должны были заметить, что остается без анализа в выводе HTML.


Тем не менее, вам следует предпочесть компоненты JSF тегам JSTL, если это технически невозможно (т.е. когда вы действительно хотите управлять построением представления, а не рендерингом представления) . h: panelGroup , как вы сами выяснили, является хорошим кандидатом, однако ui: fragment - лучший выбор, так как он имеет меньше накладных расходов.

<ui:fragment rendered="#{not empty title}">
    <h1>#{title}</h1>
</ui:fragment>

Обратите внимание, что из-за ошибки парней из JSF в файле определения тега исходной версии JSF 2.0 Netbeans подергивает, что тег не поддерживает визуализированный атрибут , но это неверно. Он, безусловно, поддерживает это. Это было исправлено в определении тега JSF 2.1.

См. Также:

43
ответ дан 3 December 2019 в 13:32
поделиться

Ну,

Вместо этого я использовал обработанный , вот так:

<h:panelGroup rendered="#{title!=null}">

                <h1>#{title}</h1>

        </h:panelGroup>
3
ответ дан 3 December 2019 в 13:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: