在STRUTS中如何處理查詢的到的RESULTSET

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中引用, 仿照 strutsexample中的例子引用。
例如:
<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:iteratenameActionForm的名字,property是在ActionForm中定義的記錄集(就是我們上面的rows)的名字了.

struts這樣的表示方式還有一些另外的好處,例如可以用bean:write format屬性

格式化字段的值,這是我們經常要用到的功能,象格式化日期和數字等。

通過這個例子大家可以做到舉一反三的效果,凡是需要用到數據庫中記錄集的地方都可以依此類推,
想下拉表單,多選框等等。

 

 
發佈了47 篇原創文章 · 獲贊 2 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章