Struts秘籍之第2段:第3.5式: 在JSTL循環(huán)中使用索引屬性
第3.5式. 在JSTL循環(huán)中使用索引屬性
問(wèn)題
你想要在在JSTL c:forEach循環(huán)而不是Struts logic:iterate循環(huán)中通過(guò)Struts html標(biāo)簽使用索引屬性。
動(dòng)作要領(lǐng)
為了創(chuàng)建一個(gè)簡(jiǎn)單索引屬性的字段,可使用bean:define標(biāo)簽將循環(huán)計(jì)數(shù)暴露為一個(gè)可用于運(yùn)行時(shí)表達(dá)式的腳本變量:







如果索引屬性是一個(gè)嵌套的bean 并且你使用的是indexed="true" 屬性,那么可以將Struts logic:iterate標(biāo)簽替換為JSTL c:forEach:






動(dòng)作變化
JSTL的c:forEach標(biāo)簽提供了一些額外的功能并且比logic:iterate更加易用。需要循環(huán)遍歷的條目可以通過(guò)使用EL來(lái)指定。JSTL 標(biāo)簽允許對(duì)集合的子集上進(jìn)行更多的控制,并且循環(huán)狀態(tài)的細(xì)節(jié)也很容易獲得。然而,如同所有JSTL標(biāo)簽一樣,沒(méi)有腳本變量被創(chuàng)建。我們?cè)谄渌惺街兴^(guò),在處理索引屬性時(shí),不得不使用腳本變量。特別是如果你沒(méi)有使用struts-el標(biāo)簽庫(kù)更是如此。
bean:define標(biāo)簽從JSTL創(chuàng)建的范圍變量中創(chuàng)建一個(gè)基本變量。這個(gè)bean:define標(biāo)簽基于取自value屬性或者標(biāo)簽體的值創(chuàng)建了一個(gè)新的范圍變量和對(duì)應(yīng)的腳本變量。后一種方式在JSTL和Struts標(biāo)簽之間建立了一個(gè)橋。在這一招中,bean:define標(biāo)簽用于創(chuàng)建一個(gè)包含可用于訪問(wèn)索引屬性的索引的變量。你可以在第3.4式中的選擇喜好顏色的標(biāo)但中使用這種技術(shù)。









根據(jù)第3.4式,你可以使用Struts-El標(biāo)簽來(lái)消除scriptlet:







如果需要為一個(gè)對(duì)象的嵌套屬性創(chuàng)建一個(gè)HTML 輸入字段,而該對(duì)象是一個(gè)索引屬性,那么請(qǐng)?jiān)赟truts html 標(biāo)簽中指定indexed="true" 屬性。indexed屬性的用法在使用JSTL c:forEach循環(huán)和使用logic:iterate循環(huán)時(shí)是一樣的。下面是這種技術(shù)如何使用在第3.4式中的表單的喜好鏈接部分:




















渲染后的索引值被正確產(chǎn)生,哪怕是使用了begin, end, 和step屬性來(lái)控制循環(huán)。下面的c:forEach用法演示了如何為集合的第1個(gè)和第3個(gè)元素產(chǎn)生輸入字段:












這將產(chǎn)生下面的HTML:










為了在循環(huán)中渲染動(dòng)態(tài)數(shù)據(jù)以供顯示,JSTL 工作的很好,并且比對(duì)贏得Struts 標(biāo)簽更易使用。你可以看到,JSTL 在訪問(wèn)索引屬性方面比Struts 標(biāo)簽支持的更好。例如,下面的代碼就展示了喜好顏色可以如何顯示:




相關(guān)招式
第3.4式演示了索引屬性的類(lèi)似用法。
你可以參考JSTL 的相關(guān)文檔和信息,以及書(shū)籍。JSTL規(guī)范參見(jiàn)http://java.sun.com/jsp/jstl.
posted on 2005-06-01 14:43 鐵手 閱讀(4129) 評(píng)論(1) 編輯 收藏 所屬分類(lèi): Java 、Struts系列