我需要在复合组件中获取特定的父组件ID。我只是发现了如何获得整个ID链,就像我在标题中所写的那样:#{cc.clientId}
。它提供(我不知道它们是如何被称为)Id1:Id2:Id3
,但我只需要Id1
,我怎么能得到它?
答案 0 :(得分:1)
您可以使用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"
中使用<f:ajax>
。
Id1:Id2:Id3
顺便称为客户端ID(正如您在生成的HTML输出中看到的那样)。 Id1
部分实际上是组件ID(正如您在JSF源代码中看到的那样)。客户ID中NamingContainer
ID的前缀与Id1:Id2:Id3
中一样,有时也称为woodstocking。