我在表单中使用了复合组件,并且我想使用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>
有任何想法吗?提前致谢。