フォームで複合コンポーネントを使用しており、複合コンポーネントの値が変更されたときに、関連フィールドのモデルの値がリセットされ、対応するコンポーネントが再度レンダリングされる(空の)ための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>
何か案は?前もって感謝します。