我已经编写了一个复合组件,并且想使用保留的 EL#{component.clientId}
来进行 JQuery 绑定。为了在页面的另一个地方(组件之外)使用这个检索到的 clientId,我使用 JSTL 将它存储在视图范围变量中。奇怪的是,JSTL 似乎阻止了将其 id 附加到其子项(NamingContainer
行为)前面的自然复合组件行为。我知道 JSTL 有点棘手,ui:repeat
因为生命周期的事情会干扰其他组件(例如),但在这里我不理解这种行为。
一些具体的代码比这个长篇演讲更好:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:composite="http://java.sun.com/jsf/composite">
<composite:interface>
[…]
</composite:interface>
<composite:implementation>
<rich:dataTable id="mySoLovedDataTable" […]>
#{component.clientId}
<!-- Commenting or uncommenting this line make the whole point -->
<c:set var="targetClientId" value="#{component.clientId}" scope="view" />
[…]
</rich:dataTable>
</composite:implementation>
</html>
加上注释的行,#{component.clientId}
给出类似j_idt261:mySoLovedDataTable
.
注释掉该行后,它只给出mySoLovedDataTable
.