在JSP中用到select列表框就如家常便飯般的常見(jiàn)!
以下是我在JSP頁(yè)面中對(duì)此的一些心得(通常會(huì)用到Struts+Hebernate+Spring):
我想大概有以下幾種方法可以在JSP中得到我們想要的select列表框
1:通過(guò)使用HTML中使用普通的select定義
<select name="select">
<option value="1">aa</option>
<option value="2">bb</option>
<option value="3">cc</option>
</select>
當(dāng)然這樣可以實(shí)現(xiàn),但是一旦用到相關(guān)的DB操作時(shí),代碼中的業(yè)務(wù),持久化,顯示處理各部分的代碼就會(huì)全部混到一起.
2:通過(guò)Struts的logic標(biāo)簽
<logic:iterate id="types" name="cglist" type="com.jbbis.netedu.common.dto.BaseCategoryDTO">
<option value='<bean:write name="types" property="id"/>'>
<bean:write name="types" property="name"/>
</option>
</logic:iterate>
其中types代表了存放集合數(shù)據(jù)的一個(gè)句柄,在option中用到它.type是指你集合中的對(duì)象.在下面的option中的一些屬性值實(shí)際上就是指此對(duì)象中的字段.比如說(shuō)property="id", property="name".logic:iterate中的name屬性一般是從session,request中得到的,所以對(duì)于cglist,很可能在你的action中,有如下的代碼:
request.setAttribute("cglist",categorys);

or

session.setAttribute("cglist",categorys);
然后就是將其在bean:write標(biāo)簽中輸出來(lái).這種方法相比前一種對(duì)于DB操作顯然要方便,但是假如要在select中加入一些JS的話就比較麻煩了,比如要保存它上次的選擇,用JS來(lái)實(shí)現(xiàn)顯得有些麻煩!
3:通過(guò)Struts的html:select標(biāo)簽,將此標(biāo)簽內(nèi)置于html:form內(nèi)(個(gè)人認(rèn)為,最大的好處莫過(guò)于它可以自動(dòng)保存上次的記錄了!).
<html:select property="typeId" onchange="gotothenews(this.value)">
<html:optionsCollection property="typeIds" label="name" value="id"/>
</html:select>typeId為你Struts的ActionForm中對(duì)應(yīng)的一個(gè)屬性,typeIds為ActionForm中的一個(gè)對(duì)象數(shù)組.name,id均為此數(shù)組中對(duì)象的屬性.lable在optionsCollection表示在select中要顯示的內(nèi)容,value則表示其對(duì)應(yīng)的值.
要注意的是此對(duì)象數(shù)組記得要全部初始化,比如說(shuō)你定義的此對(duì)象數(shù)組若長(zhǎng)度為7而你只實(shí)例化了6個(gè),則會(huì)出現(xiàn)類似
org.apache.jasper.JasperException: No bean specified
的異常!
此方法不但對(duì)DB操作方便,而且在對(duì)保存記錄方面也做得不錯(cuò)呢.在Struts中JSP頁(yè)面中使用JS時(shí),還老是出現(xiàn)一些意想不到的錯(cuò)誤(不知道為什么).
下次遇到了好的對(duì)策再貼上來(lái)......