2013-02-24 188 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,並且不需要任何性能問題,而且可以獲得大量數據。另一種方法是在網格行上創建一個彈出窗口,它將顯示額外的數據,這對您的表現也是一個很大的障礙。