你想要在在JSTL c:forEach循環而不是Struts logic:iterate循環中通過Struts html標簽使用索引屬性。
為了創建一個簡單索引屬性的字段,可使用bean:define標簽將循環計數暴露為一個可用于運行時表達式的腳本變量:
如果索引屬性是一個嵌套的bean 并且你使用的是indexed="true" 屬性,那么可以將Struts logic:iterate標簽替換為JSTL c:forEach:
JSTL的c:forEach標簽提供了一些額外的功能并且比logic:iterate更加易用。需要循環遍歷的條目可以通過使用EL來指定。JSTL 標簽允許對集合的子集上進行更多的控制,并且循環狀態的細節也很容易獲得。然而,如同所有JSTL標簽一樣,沒有腳本變量被創建。我們在其他招式中所過,在處理索引屬性時,不得不使用腳本變量。特別是如果你沒有使用struts-el標簽庫更是如此。
bean:define標簽從JSTL創建的范圍變量中創建一個基本變量。這個bean:define標簽基于取自value屬性或者標簽體的值創建了一個新的范圍變量和對應的腳本變量。后一種方式在JSTL和Struts標簽之間建立了一個橋。在這一招中,bean:define標簽用于創建一個包含可用于訪問索引屬性的索引的變量。你可以在第3.4式中的選擇喜好顏色的標但中使用這種技術。
根據第3.4式,你可以使用Struts-El標簽來消除scriptlet:
如果需要為一個對象的嵌套屬性創建一個HTML 輸入字段,而該對象是一個索引屬性,那么請在Struts html 標簽中指定indexed="true" 屬性。indexed屬性的用法在使用JSTL c:forEach循環和使用logic:iterate循環時是一樣的。下面是這種技術如何使用在第3.4式中的表單的喜好鏈接部分:
渲染后的索引值被正確產生,哪怕是使用了begin, end, 和step屬性來控制循環。下面的c:forEach用法演示了如何為集合的第1個和第3個元素產生輸入字段:
這將產生下面的HTML:
為了在循環中渲染動態數據以供顯示,JSTL 工作的很好,并且比對贏得Struts 標簽更易使用。你可以看到,JSTL 在訪問索引屬性方面比Struts 標簽支持的更好。例如,下面的代碼就展示了喜好顏色可以如何顯示:
第3.4式演示了索引屬性的類似用法。
你可以參考JSTL 的相關文檔和信息,以及書籍。JSTL規范參見http://java.sun.com/jsp/jstl.
posted on 2005-06-01 14:43 鐵手 閱讀(4128) 評論(1) 編輯 收藏 所屬分類: Java 、Struts系列