Ответ 1
Так как
ui:fragment
не поддерживает рендеринг большей части IDE (например, Netbeans отмечают его как ошибку, но он работает, потому что в параметрах JSF наследуются)
На самом деле это ошибка в объявлении файла тега JSF 2.0 Facelets (в Мохарре, в файле com/sun/faces/metadata/taglib/ui.taglib.xml
). Атрибут rendered
пропущен и отсутствует в объявлении файла тега (а также в JSF 2.0 <ui:fragment>
документация тегов), в то время как это действительно присутствует в UIComponent
. Проверка IDE основана на объявлениях файла тегов и, следовательно, дает ошибочную ошибку проверки. Эта проблема исправлена в JSF 2.1, отсутствующий атрибут добавляется в объявление файла тега (а также в JSF 2.1 <ui:fragment>
документация тегов),
Если просто игнорировать предупреждения IDE или перейти на JSF 2.1 не является вариантом, вы можете вместо этого использовать компонент <h:panelGroup>
<h:panelGroup rendered="#{condition}">
<h:outputText value="text 1"/>
<h:outputText value="text 2"/>
<h:outputText value="text 3"/>
</h:panelGroup>
Он ничего не выдает, если вы не укажете id
, style
, styleClass
и подобные атрибуты, иначе будет отображаться простой <span>
.
Если все, что у вас есть, - это простой ванильный HTML (т.е. не компоненты JSF), то вы также можете использовать <f:verbatim>
.
<f:verbatim rendered="#{condition}">
text 1
text 2
text 3
</f:verbatim>
Однако <f:verbatim>
устарел в JSF 2.0 (который, в свою очередь, также имеет документальную ошибку, Документация тегов JSF 2.0 <f:verbatim>
не упоминает устаревание, но JSF 2.1 <f:verbatim>
документация тегов).