在STRUTS中如何處理查詢的到的RESULTSET
http://www.code168.com/ShowArticle.asp?ArtClass=4&ArtID=3838
關於這個問題可能每個人有自己的解決辦法。
但如果要按照struts的風格來做,應該是這樣的:
1) 自己寫個類(假定爲DataMap),這個類繼承HashMap,並實現DynaBean
2) 將ResultSet中的數據取出填充到這個DataMap中
3)將多條數據(也就是多個DataMap)填到一個ArrayList
4) 將這個ArrayList放到你的ActionForm中
5)在jsp中引用, 仿照 struts-example中的例子引用。
例如:
<logic:iterate id="subscription" name="user" property="subscriptions">
<tr>
<td align="left">
<bean:write name="subscription" property="host" filter="true"/>
</td>
<td align="left">
<bean:write name="subscription" property="username" filter="true"/>
</td>
<td align="center">
<bean:write name="subscription" property="type" filter="true"/>
</td>
<td align="center">
<bean:write name="subscription" property="autoConnect"/>
</td>
</tr>
</logic:iterate>
這裏subscriptions就是剛纔講的 那個ArrayList
user是ActionForm的名字
subscription就是你那個DataMap的實例,代表一條記錄
那些property實際上就是字段名了。
本貼對您是否有幫助? 投票: 是 否 投票結果: 0 0
-----------------------------------------------------------
看到很多朋友在問這個問題,我願意再重複一遍。希望能對大家有用
下面是我在回答 "單選框如何用? 發表時間: 2003-3-10 下午7:20 "
時的參考代碼,很有代表性。現略作改動(下面的所有代碼都經過實際驗證)
這是一個最小實現:
後臺處理代碼:
////////////////////////
ResultSet rs = ...
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
ArrayList rows = new ArrayList();
while(rs.next()) {
HashMap row = new HashMap();
for (int i = 1; i <= columnCount; i++) {
String name = rsmd.getColumnName(i);
row.put(name, rs.getObject(i));
}
rows.add(row);
}
///////////////////////////
request.setAttribute("rows",rows); //將包裝好的ArrayList放到Request裏以便jsp使用。
注意 ////之間的代碼其實可作爲公用代碼,寫到組件裏去
(傳入ResultSet做參數,返回包裝好的ArrayList)
前臺處理代碼:假設這是一個單選框
<logic:iterate id="row" name="rows">
<html:radio property="roleId" value="id" idName="row"/>
<bean:write name="row" property="roleDesc"/>
</logic:iterate>
前臺註釋:
第1行 這裏name="rows"就是後臺setAttribute的名字 id="row"是給出循環裏要引用每一行的標識
第2行 這裏property="roleId"是html表單的變量名
value="id" 是字段的名字
idName="row" 就是第1行的id的值
第3行 這裏name="row" 就是第1行的id的值 property="roleDesc"是字段名
如果是要顯示這個resultset的記錄,方法就跟 struts例子裏的基本一樣了:
<logic:iterate id="row" name="rows">
<tr>
<td>
<bean:write name="row" property="host"/>
</td>
<td>
<bean:write name="row" property="username"/>
</td>
<td>
<bean:write name="row" property="type"/>
</td>
<td>
<bean:write name="row" property="autoConnect"/>
</td>
</tr>
</logic:iterate>
這裏的各項屬性意義與上一樣。
需要提醒的是:因爲我們是將記錄集放到request中的,所以這個<logic:iterate標籤中不需要使用property屬性,struts的例子是把這個記錄集放到ActionForm中所以
在他的例子中<logic:iterate的name是ActionForm的名字,property是在ActionForm中定義的記錄集(就是我們上面的rows)的名字了.
用struts這樣的表示方式還有一些另外的好處,例如可以用bean:write的 format屬性
格式化字段的值,這是我們經常要用到的功能,象格式化日期和數字等。
通過這個例子大家可以做到舉一反三的效果,凡是需要用到數據庫中記錄集的地方都可以依此類推,
想下拉表單,多選框等等。