Вам нужно будет позаботиться об идентификаторах зоны вручную, в противном случае все они получат автоматически сгенерированный идентификатор клиента.
В вашем TML вы также можете указать атрибут id
(без пространства имен t:
), который затем используется как есть в отображаемой разметке:
<t:zone t:id="myZoneId" id="${zoneClientId}">
...
</t:zone>
Если в вашем компоненте присутствует какое-то уникальное значение (например, идентификатор), используйте его для создания идентификатора на стороне клиента:
@Parameter
private MyType myParam;
public String getZoneClientId() {
return "myZone-" + myParam.getId();
}
Затем вы можете использовать тот же метод получения для параметра zone
в ссылках или формах, которые также обновляют зону:
<a t:type="ActionLink" t:zone="prop:zoneClientId">...</a>
Если ссылка или форма содержится внутри самой зоны, существует еще более простое решение:
<t:zone t:id="myZoneId">
...
<a t:type="ActionLink" t:zone="^">...</a>
</t:zone>
Специальное значение ^
заставляет Tapestry использовать первую охватывающую зону в качестве элемента для обновления.
Также взгляните на раздел Ajax и Zones в документе , который объясняет некоторые из них более подробно.