2013-02-24 111 views
0

我有以下结构显示在ZUL文件中,并从Java控制器获得临床对象列表。zk嵌套forEach

我尝试了zul中的几个zk组件,但没有运气。我应该使用什么组件与forEach

  • 列表框
  • 列表项
  • 电网

这里是结构需要显示:

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) 
    } 
} 

回答

0

您可以使用一个列表框或网格。

  • 如果你使用一个列表框,它将包含列表项的对象
  • 如果你使用一个网格,它将包含一个行对象,其中将包含行对象

到列表项或行,你会添加其他组件:最简单的将是标签对象

我注意到你有一个提供者的内部表。对于这些,你可能需要一个嵌套的Grid或Listbox。您也可以使用ZK的Detail组件。它将允许您扩展以查看内部表格。

1

正如大流士给出的答案解释,这里是如何使用<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> 
0

有多种方式如何实现这一

  • 包括独立zul文件到模板行,它将包含一个带有单独视图模型的网格 - 这种风格可以一次显示所有嵌套网格,但它应该和它会有更大的数据ammout的性能issiues(因为行数== count嵌套的视图模型网格)
  • 包括具有自己模板的嵌套网格,以及作为视图模型参数的数据模型,并根据需要显示此网格(按钮点击,行点击等) - 这是在没有性能问题的情况下的不良方式,但是您会能够只显示一个在时间网格嵌套

最后的话 - 只是鸵鸟政策

嵌套网格网格是一个非常糟糕的设计,因为它是非常努力,解析它,它只适用于小数据。在我看来,做到这一点的最佳方式是并排创建两个单独的网格,并在第一个网格中单击行之后在第二个网格中显示adition数据。通过这种方式,您可以实现非常快速的GUI,并且不需要任何性能问题,而且可以获得大量数据。另一种方法是在网格行上创建一个弹出窗口,它将显示额外的数据,这对您的表现也是一个很大的障碍。