3

次のUIPrimefacesスニペットがあります。

<pou:growl id="growl" 
               redisplay="false"
               showDetail="false" 
               sticky="false" />

このアイテムを更新しようとすると、たとえば次のようになります。

<pou:commandButton value="Update" 
                   update=":growl"/>

すべてが正常に動作します。

しかし、唸り声を複合コンポーネントに移動して、それを呼び出そうとすると(つまり、このように):

<ez:growl/>

次のようなエラーメッセージが表示されます。

javax.faces.FacesException: Cannot find component with identifier ":growl" referenced from "j_idt84:j_idt85:testForm:j_idt111".

私の質問は、なぜこれらの自動生成された名前がすべて追加されるのか、そして実際にコンポーネントにアクセスして更新できるようにそれらを制御するにはどうすればよいのかということです。

4

1 に答える 1

14

これは、複合コンポーネントが本質的にUINamingContainer(、などのように)から拡張され<h:form><h:dataTable>そのため、子のクライアントIDに独自のIDが付加されるためです。

特定の機能要件を達成するには、最初に複合コンポーネントに固定IDを指定します。

<ez:growl id="growl"/>

次に、複合コンポーネントのクライアントIDを要素IDとして、または複合コンポーネントのクライアントIDを使用<p:growl>して、複合コンポーネントの実装にプレーンHTMLコンテナ要素を埋め込みます。<div><span>

<cc:implementation>
    <span id="#{cc.clientId}">
        <p:growl />
    </span>
</cc:implementation>

update=":growl"これで、通常の方法を使用できます。

于 2012-07-27T15:15:49.163 に答える