select
在JSP中用到select列表框就如家常便飯般的常見!
以下是我在JSP頁面中對此的一些心得(通常會用到Struts+Hebernate+Spring):
我想大概有以下幾種方法可以在JSP中得到我們想要的select列表框
1:通過使用HTML中使用普通的select定義
<select name=select>
<option value=1>aa</option>
<option value=2>bb</option>
<option value=3>cc</option>
</select>
當然這樣可以實現,但是一旦用到相關的DB操作時,代碼中的業務,持久化,顯示處理各部分的代碼就會全部混到一起.
2:通過Struts的logic標籤
<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代表了存放集合資料的一個控制代碼,在option中用到它.type是指你集合中的對象.在下面的option中的一些屬性值實際上就是指此對象中的欄位.比如說property=id, property=name.logic:iterate中的name屬性一般是從session,request中得到的,所以對於cglist,很可能在你的action中,有如下的代碼:
request.setAttribute(cglist,categorys);
or
session.setAttribute(cglist,categorys);
然後就是將其在bean:write標籤中輸出來.這種方法相比前一種對於DB操作顯然要方便,但是假如要在select中加入一些JS的話就比較麻煩了,比如要儲存它上次的選擇,用JS來實現顯得有些麻煩!
3:通過Struts的html:select標籤,將此標籤內建於html:form內(個人認為,最大的好處莫過於它可以自動儲存上次的記錄了!).
<html:select property=typeId onchange=gotothenews(this.value)>
<html:optionsCollection property=typeIds label=name value=id/>
</html:select>
typeId為你Struts的ActionForm中對應的一個屬性,typeIds為ActionForm中的一個對象數組.name,id均為此數組中對象的屬性.lable在optionsCollection表示在select中要顯示的內容,value則表示其對應的值.
要注意的是此對象數組記得要全部初始化,比如說你定義的此對象數組若長度為7而你只執行個體化了6個,則會出現類似
org.apache.jasper.JasperException: No bean specified
的異常!
此方法不但對DB操作方便,而且在對儲存記錄方面也做得不錯呢.在Struts中JSP頁面中使用JS時,還老是出現一些意想不到的錯誤(不知道為什麼).
下次遇到了好的對策再貼上來......