我正在使用Apache Wicket开发Web应用程序,我有三种类型的页面,基本上是编号列表.每个之间的区别在于列表中的项目是如何显示的.(即一个有一个标题行和一个段落,另一个只有段落).最终,数据将来自数据库,但目前无法使用.
我想我可以通过创建一个显示一个RepeatingView的页面来实现这一点,该窗口从Panels的ArrayList中获取它的项目.我会为每种类型的列表项创建一个不同的Panel.然后我可以将上述页面扩展为三个子类,每个子类对应我想要的每种特定类型的面板.我是在正确的轨道上,还是有更好的方法来做到这一点?
我发现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)
您不是向页面提供面板列表,而是从数据库中提供相同的数据列表,然后根据当前视图添加不同的面板.
最后,您有一个页面(带有视图类型的标志)和不同的面板(或片段),用于根据每种视图类型查看数据的方式.