Я хочу получить конкретный идентификатор родительского компонента в составном компоненте. Я только узнал, как получить всю цепочку идентификаторов, а именно, как я писал в названии: #{cc.clientId}
. Он доставляет (я не знаю, как их называют) Id1:Id2:Id3
, но мне нужно только Id1
, как я могу его получить?Как извлечь первый идентификатор компонента из # {cc.clientId}?
ответ
Вы можете использовать the fn:split()
function для этого:
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
...
#{fn:split(cc.clientId, ':')[0]}
Другой способ заключается в использовании UIComponent#getNamingContainer()
на UIComponent#getParent()
:
#{cc.parent.namingContainer.parent.namingContainer.clientId}
Там могут быть более эффективные способы в зависимости от конкретного функционального требования и код, который вы до сих пор, обе, которые отсутствуют в вашем вопросе. Например, если Id1
действительно ссылается на <h:form>
, тогда вы можете использовать render="@form"
вместо .
Id1:Id2:Id3
, кстати, просто называется идентификатором клиента (как вы видите в сгенерированном выходе HTML). Часть Id1
на самом деле является идентификатором компонента (как вы видите в исходном коде JSF). Предполагает, что идентификаторы NamingContainer
в ID клиента, как в Id1:Id2:Id3
, также иногда называются древесными породами.