如何从#{cc.clientId}中提取第一个组件ID?

时间:2012-01-12 18:42:31

标签: ajax jsf jsf-2 composite-component clientid

我需要在复合组件中获取特定的父组件ID。我只是发现了如何获得整个ID链,就像我在标题中所写的那样:#{cc.clientId}。它提供(我不知道它们是如何被称为)Id1:Id2:Id3,但我只需要Id1,我怎么能得到它?

1 个答案:

答案 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。