Как мне использовать базовый класс или интерфейс с компонентом сетки или цикла в Tapestry 5? - PullRequest
2 голосов
/ 24 февраля 2009

У меня есть конкретный класс A, который расширяет BaseA и реализует InterfaceA. Я хочу просмотреть список A, используя базовый класс или интерфейс в качестве переменной цикла. Попытка что-то вроде этого:

<t:loop source="listOfA" value="propertyOfTypeBaseA">
    ${propertyOfTypeBaseA.someField}
</t:loop>

выдает ошибку "Не удалось найти принуждение от типа A к BaseA". То же самое происходит, когда я устанавливаю значение для свойства типа InterfaceA. Я могу заставить цикл работать, если я использую Object как тип переменной цикла, но тогда я не могу получить доступ ни к одному из полей в конкретном классе или интерфейсе.

Кажется, что Tapestry должен знать, как привести объект к интерфейсу, который он реализует, но я также попытался внести приведение из A в BaseA / InterfaceA, и он все равно дал мне эту ошибку, даже если он фактически отображал приведение список.

Есть идеи?

1 Ответ

3 голосов
/ 24 февраля 2009

Интерфейс будет работать, если его нет в пакете, которым управляет Tapestry. И теперь я знаю, что «базовый» пакет - это пакет, которым управляет Tapestry в дополнение к страницам и компонентам. Я поместил свой базовый класс и интерфейс в этот пакет, думая, что они будут защищены от загрузчика классов Tapestry voodoo. После их удаления мне все еще нужно было внести принуждение для базового класса, но не для интерфейса.

...