用過Jakarta Struts的兄弟都知道ActionForm的使用方法和她在Struts框架中所起的作用
但是您是否在為要給ActionForm編寫一大堆setter和getter方法而感到厭倦和疲憊呢?的確
我是厭倦了
所以我要尋求新的方法
我第一反映就是想使用Map接口
將所有的表單參數全部放進HashMap中
然後在Action中get出這個Map
並進行業務邏輯的操作
有了想法當然要去試驗了
實踐才是檢驗真理的唯一標准
首先要編寫一個擴展ActionForm的類
代碼如下(由於篇幅
我只列出了代碼的關鍵部分):
package com
jacktan
struts
formbean;
import java
util
*;
import javax
servlet
http
*;
import org
apache
struts
action
*;
public class CustomForm extends ActionForm {
private Map formvalueMap = new HashMap();
public void setFormvalueMap(Map p_FormvalueMap){
this
formvalueMap = p_FormvalueMap;
}
public Map getFormvalueMap(){
return this
formvalueMap;
}
public void setFormvalue(String key
Object value){
formvalueMap
put(key
value);
}
public Object getFormvalue(String key){
return formvalueMap
get(key);
}
}
下面對上面的代碼一一做解釋
第
行定義了一個HashMap類的實例變量
這個Map用於存放表單遞交上來的參數值
作為鍵值對存在
第
行的setFormvalueMap()方法用於設置實例變量formvalueMap;
第
行的getFormvalueMap()方法用於獲取實例變量formvalueMap
這個方法將在Action類中調用
替代了以前在Action類中調用大量的(CustomForm)form
getXXX()方法
第
行是關鍵的方法
setFormvalue()這個方法就是取代以前在ActionForm中大量的setXXX()方法
用於接受表單傳遞上來的輸入值
注意這個方法的參數
key是一個String類型的
用作Map的key
value是Object類型的
這個參數就是表示表單傳送過來的各個輸入值
第
行是getFormvalue()方法
用於從Map中根據key返回一個value對象
好了
ActionForm的任務完成了
不過離目標還有好大一段距離
目前只完成了三分之一的工作
我們繼續干!
有了ActionForm接下來就是要編寫Action類了
代碼如下(由於篇幅
我只列出了代碼的關鍵部分)
package com
jacktan
struts
action;
import java
util
*;
import javax
servlet
http
*;
import org
apache
struts
action
*;
import com
jacktan
struts
formbean
CustomForm
public class CustomAction extends Action {
public ActionForward execute(
ActionMapping p_Mapping
ActionForm p_Form
HttpServletRequest p_Request
HttpServletResponse p_Response)
throws Exception{
Map formvalues =
((CustomForm)p_Form)
getFormvalueMap();
return p_Mapping
findForward(
Success
);
}
}
CustomAction類的關鍵行在第
行
使用在CustomForm類中定義的 getFormvalueMap()方法一次就將表單中所有的提交參數收集完畢
省掉了以前要使用很多getXXX()方法從ActionForm中獲取表單值的做法
好了
接下來是要編寫JSP頁面了
因為我們的ActionForm使用特殊的方法接受參數值
所以在寫表單頁面的時候也要使用特殊的簽名
代碼如下
<html:form action=
login
><table width=
%
border=
>
<tr>
<td width=
%
>
</td>
<td width=
%
>
</td><td width=
%
rowspan=
valign=
top
><html:errors/></td>
</tr>
<tr>
<td>
</td>
<td height=
>用戶名</td>
</tr>
<tr>
<td> </td><td height=
><html:text property=
formvalue(username)
size=
maxlength=
/></td>
</tr>
<tr>
<td>
</td>
<td height=
>密碼</td>
</tr>
<tr>
<td>
</td><td height=
><html:password property=
formvalue(password)
size=
maxlength=
redisplay=
false
/></td>
</tr>
<tr>
<td> </td><td height=
><html:submit value=
登錄
/> <html:button property=
close
value=
關閉
onclick=
Close()
/></td>
</tr></table>
上面是一個用戶登錄的界面
注意紅色的部分
這個簽名要和CustomForm類中的setFormvalue()簽名保持一致
注意大小寫
Struts會利用Java的反射機制尋找到合適的方法調用
formvalue(username)圓括號中的字符串可以是表示該輸入域在數據庫中字段的映射
也可以是自己自定義的字符串
這個字符串將作為Map的key保存
好了
終於要完成了
最後要做的就是設置struts的配置文件了
打開struts
config
xml文件
在<form
beans>段輸入以下代碼
<form
beans>
<form
bean
name=
CustomForm
type=
com
jacktan
struts
formbean
CustomForm
/>
</form
beans>
在<action
mappings>段輸入以下代碼
<action
path=
/login
type=
com
jacktan
struts
action
CustomAction
name=
addDeviceForm
scope=
request
>
<forward name=
login
path=
main
jsp
/>
</action>
大功告成
所有的任務都完成了
為了檢測是否可以正確運行
我在Action類中加入如下測試代碼:
Set set = formvalues
entrySet();
Iterator it = erator();
while( it
hasNext() ){
Map
Entry me = (Map
Entry)it
next();
System
out
println((String)me
getKey);
System
out
println((String)me
getvalue);
}
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19425.html