2

これが私の複合コンポーネントです:

<composite:interface>
    <composite:attribute name="attr1" />
    <composite:clientBehavior name="xyz" event="valueChange" targets="chkbox" />
</composite:interface>
<composite:implementation>
    <h:panelGrid>
    <h:panelGroup>
        <h:selectBooleanCheckbox id="chkbox"
                value="#{cc.attrs.attr1}">
            </h:selectBooleanCheckbox>
    </h:panelGroup>
</h:panelGrid>
</composite:implementation>

そして私のページ:

<h:form id="myForm">
  <cc:myComp attr1="#{myBean.someAttr}">
    <f:ajax render="myform:grid1" event="xyz" listener="{myBean.listenerMethod}"/>
  </cc:myComp>

  <h:panelGrid id="grid1">
      <h:panelGroup>
         <h:inputTextarea id="rationale" rows="4" cols="70"
                value="#{myBean.rationale}" />
      </h:panelGroup>
  </h:panelGrid>
</h:form>

以下のエラーが発生します:

<f:ajax>不明なID'myForm:grid1'が含まれています-コンポーネントchkboxのコンテキストでそれを見つけることができません

コードから削除するrender="myform:grid1"と、ajax呼び出しは正常に機能しています。基本的に、私の複合コンポーネントから、別のOUTSIDEコンポーネントを参照することはできません。これはどのように発生し、どうすれば解決できますか?

4

1 に答える 1

5
<f:ajax render="myform:grid1">

NamingContainer区切り文字で始まらないクライアントID (この場合:は)は、最も近いNamingContainer親を基準にしています。最も近いNamingContainer親は、特定の場合、複合コンポーネント自体です。myform:XXX:myform:grid1したがって、この構成は基本的に、複合コンポーネントに関連する完全なクライアントIDを持つコンポーネントを探します。ここXXXで、は複合コンポーネントの自動生成されたIDです。ただし、この完全なクライアントIDを持つそのようなコンポーネントはありません。

パネルグリッドの完全なクライアントIDが実際にあると仮定するとmyform:grid1(つまり、ブラウザでページを開き、右クリックしてソースを表示すると、実際に表示されます<table id="myform:grid1">)、代わりにNamingContainer区切り文字を前に付けて、絶対的なクライアントIDにする必要があります。キャラクター:

<f:ajax render=":myform:grid1">

参照:

于 2012-12-04T15:56:35.217 に答える