我在zul文件中显示了以下结构,并从Java控制器中获得了clinic对象的列表。
我在zul中尝试了几个zk组件,但没有成功。forEach
应该使用什么组件?
- 列表框
- ListItem
- 网格
以下是需要显示的结构:
For each clinic
{
For each clinic.location
{
For each (clinic.location.provider)
{
Output (provider display name)
}
Output (clinic name)
Output (clinic.location address)
Output (clinic.locatoin telephone number)
Output (clinic.web address)
}
}
正如Darius给出的答案所解释的,这里有一个如何将<Grid>
与<rows>
组件一起使用的示例
<?page title="Result"?>
<zk>
<window apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('fully.qualified.viewmodel.classname')"
title="Result Window" border="normal" >
<div>
<grid>
<rows>
<row>
<listbox model="@bind(vm.listname)">
<listhead>
<listheader label="Item Name"
style="text-align:center;">
</listheader>
<listheader label="Attribute Value"
style="text-align:center;">
</listheader>
<listheader label="Qualifier Value"
style="text-align:center;">
</listheader>
</listhead>
<template name="model" var="item">
<listitem value="${item }">
<listcell label="@load(item.name)"
style="text-align:center;">
</listcell>
<listcell
style="text-align:center;">
<textbox
value="@bind(item.attributeValue)"
style="text-align:center;" />
</listcell>
<listcell
label="@load(item.qualifierValue)"
style="text-align:center;">
</listcell>
</listitem>
</template>
</listbox>
</row>
</rows>
</grid>
</div>
</window>
</zk>
您可以使用Listbox或Grid。
- 如果使用Listbox,它将包含Listitem对象
- 如果使用Grid,它将包含Rows对象,该对象将包含Row对象
对于Listitem或Row,您将添加其他组件:最简单的是Label对象
我注意到您有一个内部提供者表。对于这些,您可能需要一个嵌套的网格或列表框。您也可以使用ZK的Detail组件。它将允许您展开以查看内部表。
有多种方法可以实现此
- 包括单独的zul文件到模板行,whitch将包含一个具有单独视图模型的网格-这种风格你可以一次显示所有嵌套网格,但它应该而且会有更大数据量的性能损失(因为行数==嵌套网格的视图模型数(
- 包含带有自己模板的嵌套网格,并将数据模型作为视图模型的参数,并按需显示此网格(按钮单击、行单击等(-这是在没有性能问题的情况下的最佳方式,但一次只能显示一个嵌套网格
词尾词-不要
将网格嵌套到网格是一种非常糟糕的设计,因为渲染它非常困难,而且它只适用于小数据。在我看来,最好的方法是并排创建两个独立的网格,并在第一个网格中单击行后,在第二个网格中显示adition数据。通过这种方式,您可以在没有性能损失的情况下实现非常快速的gui,甚至可以使用大量数据。另一种方法是在网格行上创建一个弹出窗口,whitch将显示额外的数据,这对您的性能也有很大好处。