2012-07-13 111 views
0

我在包含元素{a,b,c,d,e,g,h,y,t}的struts2類中有一個列表。 我想顯示該列表以表的格式是這樣的:如何以表格格式在jsp頁面上顯示列表

A B C

d例如

ħý噸

這意味着每行3個元件。 我使用「s:iterator」和「s:property」標籤。

+0

是這個功課嗎?提供代碼 – 2012-07-13 09:01:12

+0

如果在JSP中很難做到這一點,那麼可以在您的操作中使用Java來完成此操作,並將此新的'List '(每行包含1到3個值)傳遞給JSP。 – 2012-07-13 09:27:36

+0

感謝alli得到了我的邏輯 – ankit 2012-07-13 09:27:40

回答

0

看起來很容易。

<table> 
    <tr> 
     <s:subset source="{1,2,3,4,5,6,7,8,9}" count="3" start="0"> 
      <s:iterator> 
       <td><s:property /></td> 
      </s:iterator> 
     </s:subset> 
    </tr> 
    <tr> 
     <s:subset source="{1,2,3,4,5,6,7,8,9}" count="3" start="3"> 
      <s:iterator> 
       <td><s:property /></td> 
      </s:iterator> 
     </s:subset> 
    </tr> 
    <tr> 
     <s:subset source="{1,2,3,4,5,6,7,8,9}" count="3" start="6"> 
      <s:iterator> 
       <td><s:property /></td> 
      </s:iterator> 
     </s:subset> 
    </tr> 
</table> 

UPDATE

如果你不想使用subset,這裏是另類。

<table> 
    <s:iterator value="{1,2,3,4,5,6,7,8,9}" status="status"> 
     <s:if test="%{#status.index == 0}"><tr><td><s:property /></td></s:if> 
      <s:elseif test="%{#status.index%3 == 0}"> 
      </tr><tr><td><s:property /></td> 
      </s:elseif> 
      <s:else> 
       <td><s:property /></td> 
      </s:else> 
     </s:iterator> 
    </tr> 
</table> 
+0

你喜歡子集...但是這可以通過檢查迭代器索引並進行單個數字比較來處理。這大大減少了代碼重複。你的例子也省略了最後的行和單元格。 – 2012-07-13 12:35:14

+0

@DaveNewton haha​​ha ...是的,你說得對,但你不覺得'subset'更快嗎? – Jaiwo99 2012-07-13 12:52:16

+0

我懷疑三個子集會比單個數字比較快,但也許。更令人困惑的是,還有3倍的來源。 – 2012-07-13 12:58:04

0

我的方法是在JB的「在Java端做」和Jaiwo的「在視圖中做」。

我希望有一個自定義標籤,它可以獲得列數,拆分列表,添加空元素(如果它不是列數的偶數倍),並將所有邏輯封裝在一個很好的小包中。

對於只有視圖層的方法,我會使用Jaiwo代碼的變體。對於子集的想法,我會打破他們出到一個有凝聚力的塊,但仍然做雙迭代– IMO這是更清楚:

<s:set var="items" value="{1,2,3,4,5,6,7,8,9}" /> 

<s:subset var="list1" source="#items" start="0" count="3" /> 
<s:subset var="list2" source="#items" start="3" count="3" /> 
<s:subset var="list3" source="#items" start="6" count="3" /> 

<s:set var="nested" value="{#attr.list1, #attr.list2, #attr.list3}" /> 

<table> 
    <s:iterator value="#nested"> 
    <tr> 
     <s:iterator> 
     <td><s:property /></td> 
     </s:iterator> 
    </tr> 
    </s:iterator> 
</table> 

這分崩離析當列表不是偶數倍的列數;你不能(容易地)將項目附加到子集(它不是一個列表,它是一個迭代器),並且將項目添加到原始列表在JSP中很笨拙。

Java-layer-only方法的問題在於,如果您希望能夠從視圖層設置列計數(合理的願望),則需要將列計數設置爲Java。 OGNL可以讓我們調用任意方法,所以最終我可能會實現一個小工具,創建嵌套列表:

<s:iterator value="@[email protected](items, 3)"> 
    ... 

但是我換了一個自定義標籤,因爲(a)它的醜陋,和(b)它干擾主線JSP。與Rails中的partials類似,應該重構顯示對象列表,其中包含:

<app:showItems items="..." columns="..." />