2

我有一个扩展 BaseA 并实现 InterfaceA 的具体类 A。我想使用基类或接口作为循环变量来循环 A 列表。尝试这样的事情:

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

给我一个错误“找不到从类型 A 到 BaseA 的强制”。当我将值设置为 InterfaceA 类型的属性时,也会发生同样的事情。如果我使用 Object 作为循环变量类型,我可以让循环工作,但是我无法访问具体类或接口上的任何字段。

似乎 Tapestry 应该知道如何从一个对象强制转换为它实现的接口,但我也尝试将强制从 A 贡献到 BaseA/InterfaceA 并且它仍然给了我这个错误,即使它实际上在列表中显示了强制。

有任何想法吗?

4

1 回答 1

3

如果不在 Tapestry 管理的包中,该界面将工作。而且我现在知道“基本”包是 Tapestry 除了页面和组件之外还管理的包。我已经将我的基类和接口放在那个包中,认为它们不会受到 Tapestry 的类加载器 voodoo 的影响。将它们移出后,我仍然需要为基类提供强制转换,但不需要为接口提供强制转换。

于 2009-02-24T09:24:25.830 回答