複合コンポーネントを作成しましたが、予約済みのEL#{component.clientId}
を使用してJQueryバインドを作成したいと思います。この取得したclientIdをページ内の別の場所(コンポーネント外)で使用するには、JSTLを使用してビュースコープ変数に格納します。奇妙なことに、JSTLは、子の前にIDを追加するという自然な複合コンポーネントの動作(NamingContainer
動作)を妨げているようです。ui:repeat
JSTLは少しトリッキーで、ライフサイクルの問題のために他のコンポーネント(たとえば)に干渉することは知っていますが、ここではこの動作を理解していません。
いくつかの具体的なコードは、この長いスピーチよりも優れています。
<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
。