Wicket页面列出了面板

1 wicket list panel

我正在使用Apache Wicket开发Web应用程序,我有三种类型的页面,基本上是编号列表.每个之间的区别在于列表中的项目是如何显示的.(即一个有一个标题行和一个段落,另一个只有段落).最终,数据将来自数据库,但目前无法使用.

我想我可以通过创建一个显示一个RepeatingView的页面来实现这一点,该窗口从Panels的ArrayList中获取它的项目.我会为每种类型的列表项创建一个不同的Panel.然后我可以将上述页面扩展为三个子类,每个子类对应我想要的每种特定类型的面板.我是在正确的轨道上,还是有更好的方法来做到这一点?

jbr*_*ver 5

我发现RepeatingView对这种事情非常灵活,你不应该需要三个单独的页面.它只希望将一个组件添加到转发器中,而不是哪种组件.只要您保持Wicket ID一致,您甚至可以混合带有自己标记的组件(例如Panel/Fragment).

我也不鼓励你使用面板列表.它只是为列表提供良好的编程意义,以包含您的数据,然后根据某些标志添加适当的视图容器.

所以,这样的标记:

<div wicket:id="repeater">
   <div wicket:id="listItem" />
</div>
Run Code Online (Sandbox Code Playgroud)

适用于以下内容:

RepeatingView rv = new RepeatingView("repeater");

for (DataObject o : dataList) {
   // You can probably add to the rv directly, but this is the common usage
   WebMarkupContainer c = new WebMarkupContainer(rv.newChildId());
   rv.add(c);
   if (shortVersion)
       c.add(new ShortPanel("listItem", new Model<DataObject>(o)));
   else
       c.add(new LongPanel("listItem", new Model<DataObject>(o)));
}
Run Code Online (Sandbox Code Playgroud)

您不是向页面提供面板列表,而是从数据库中提供相同的数据列表,然后根据当前视图添加不同的面板.

最后,您有一个页面(带有视图类型的标志)和不同的面板(或片段),用于根据每种视图类型查看数据的方式.