代码之家  ›  专栏  ›  技术社区  ›  Brian Deterling

如何在Tapestry 5中使用带有网格或循环组件的基类或接口?

  •  2
  • Brian Deterling  · 技术社区  · 15 年前

    我有一个具体的类a,它扩展了BaseA并实现了InterfaceA。我想使用基类或接口作为循环变量来循环一个列表。试着这样做:

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

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

    Tapestry似乎应该知道如何从对象强制到它实现的接口,但我也尝试了从a强制到BaseA/InterfaceA,它仍然给了我这个错误,尽管它实际上在列表中显示了强制。

    有什么想法吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Brian Deterling    15 年前

    如果接口不在Tapestry管理的包中,那么它将工作。我现在知道,Tapestry除了管理页面和组件外,还管理“基本”包。我把我的基类和接口放在那个包中,认为它们可以安全地使用Tapestry的类加载器voodoo。在将它们移出之后,我仍然需要为基类(而不是接口)提供强制。