Я использую 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>
не указан?
Недопустимое пространство имен 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.
Ну,
Вместо этого я использовал обработанный
, вот так:
<h:panelGroup rendered="#{title!=null}">
<h1>#{title}</h1>
</h:panelGroup>