1

フォームで複合コンポーネントを使用しており、複合コンポーネントの値が変更されたときに、関連フィールドのモデルの値がリセットされ、対応するコンポーネントが再度レンダリングされる(空の)ためのajax呼び出しを使用したい。しかし、コンポーネントのレンダリングしか設定できないようです。別のものではありません。私は取得し続け<f:ajax> contains an unknown id 'ticketForm:gfhId'ます。

複合コンポーネントがありますloc:Location(簡略化)

<!DOCTYPE...
<html...
<h:body>
  <composite:interface>
    <composite:attribute name="visibleFieldValue" required="true" />
    <composite:attribute name="hiddenFieldValue" required="true" />
    <composite:clientBehavior name="changeLocation" event="click" targets="updateButton deleteButton"/>
  </composite:interface>
  <composite:implementation>
    <div id="#{cc.clientId}">
      <h:inputText id="visibleId" value="#{cc.attrs.visibleFieldValue}"
        readonly="true" onfocus="#{rich:component('popUpPnl')}.show('', {top:'100px', left:'250px'});"/>
      <h:inputHidden id="hiddenId" value="#{cc.attrs.hiddenFieldValue}"
        converter="es.caib.gesma.gesman.data.converter.LocationConverter" />
      <a4j:commandButton id="deleteButton"
        image="/resources/images/icons/textfield_delete.png" alt="Borrar"/>
      <h:commandButton id="updateButton" value="Update"/>

      ...
    </composite:implementation>
  </body>
</html>

コンポーネントは、フォーム内ticketFormで次のように使用されます。

<loc:location id="locationId"
  hiddenFieldValue="#{ticketCtrl.ticket.location}"
  visibleFieldValue="#{ticketCtrl.ticket.locationDescription}">
  <f:ajax event="changeLocation" render="ticketForm:gfhId" execute="@this"
    listener="#{ticketCtrl.locationListener}"/>
</loc:location>

レンダリングを設定する@all@form、例外を表示しませんが、gfhIdコンポーネントはレンダリングされません(複合コンポーネントにのみ適用されていると思います)。

比較のために、同じ形式のinputTextコンポーネントを使用して目的の動作を設定しました。

<h:inputText id="contactId" value="#{ticketCtrl.ticket.contactPerson}">
  <a4j:ajax event="change" render=":ticketForm:gfhId"
    execute="@this" listener="#{ticketCtrl.locationListener}"/>
</h:inputText>

何か案は?前もって感謝します。

4

1 に答える 1

3

inおよびof のすべての相対クライアント ID (つまり、 で始まらないもの:) は、親コンポーネントに対して相対的に解決されます。複合コンポーネントは暗黙的に. したがって、基本的には のコンテキスト内を探しますが、何もありません。executerender<f:ajax>NamingContainerNamingContainerticketForm:gfhId<cc:implementation>

代わりに絶対クライアント ID を使用してください。

<f:ajax ... render=":ticketForm:gfhId" />

以下も参照してください。

于 2012-09-13T14:27:00.357 に答える