Ответ 1
В зависимости от назначения шаблона <ui:include>
у вас есть несколько вариантов:
-
Используйте
<f:subview>
. Он создает другой контекстNamingContainer
(например, как<h:form>
,<h:dataTable>
и все друзья):<f:subview id="top"> <ui:include src="/WEB-INF/includes/some.xhtml" /> </f:subview> ... <f:subview id="bottom"> <ui:include src="/WEB-INF/includes/some.xhtml" /> </f:subview>
Компоненты, определенные в
some.xhtml
, получат соответственно префиксtop:
иbottom:
в их идентификаторе. -
Поверните его в файл тега , для которого требуется атрибут
id
.<my:some id="top" /> ... <my:some id="bottom" />
И используйте этот идентификатор для префикса идентификатора компонентов в композиции.
<ui:composition 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" > ... <h:someComponent id="#{id}_some" /> <h:otherComponent id="#{id}_other" /> ... <ui:composition>
-
превратите его в составной компонент . Компонентные компоненты по существу уже являются
NamingContainer
, поэтому их атрибутid
не является обязательным. В основном замените<ui:composition 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:composition>
по
<ui:component 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:cc="http://java.sun.com/jsf/composite" > <cc:interface> <!-- This is optional. --> </cc:interface> <cc:implementation> ... <h:someComponent id="some" /> <h:otherComponent id="other" /> ... </cc:implementation> <ui:component>
Таким образом вы можете использовать его следующим образом:
<my:some id="top" /> ... <my:some id="bottom" />
Компоненты, определенные в
<cc:implementation>
, получат соответственно префиксtop:
иbottom:
в их идентификаторе (обратите внимание, что атрибут составного компонентаid
не является обязательным, JSF будет в противном случае автогенерировать один).