Многократное использование пользовательского компонента, содержащего зону - PullRequest
2 голосов
/ 30 августа 2011

Я сталкиваюсь с проблемой при использовании гобелена 5.2.0: многократное использование компонента, содержащего зону.

В этот момент компонент используется 3 раза на одной странице, но только один экземплярработает хорошо.Tml, связанный с компонентом, выглядит следующим образом:

<t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd">
    <t:zone t:id="myZoneId">
        <!-- component's zone content goes there -->
    </t:zone>
</t:container>

Причина этой проблемы очень проста, как мы видим, если мы будем использовать этот компонент несколько раз на одной странице, то идентификатор зоны будетне быть уникальным, и на странице будет присутствовать несколько зон с одинаковым идентификатором.

Теперь вот мой вопрос: какой подход можно использовать для того, чтобы сделать идентификатор зоны в компоненте уникальным, когда компонентиспользуется один или несколько раз и без использования зоны вне контейнера.

Заранее благодарим вас за ваши идеи.

1 Ответ

2 голосов
/ 31 августа 2011

Вам нужно будет позаботиться об идентификаторах зоны вручную, в противном случае все они получат автоматически сгенерированный идентификатор клиента.

В вашем 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 в документе , который объясняет некоторые из них более подробно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...