banq大哥、各位好心的大哥大姐們!求教一個關於Sturts+Spring中ActionForm的問題
經常看別人的提問和熱心道友們的熱情參與,受益非淺,今天終於有機會向banq大哥和熱心的道友們請教了,希望大哥們指點小弟一下!
我遇到的問題是這樣的:在一個main.jsp頁面上點選一個連結
<a href="addStudent_listClasses.do">新生註冊</a>後,跳轉到學生註冊的addStu.jsp頁面上,該頁面中的登錄檔單中有一個要學生選擇班級的下拉框
<html:select property="classesNo">
<html:option value="0">請選擇班級</html:option>
<html:options property="value" labelProperty="label" collection="classOptions" />
</html:select>
而我的目標是:當跳轉到學生註冊這個頁面時,班級下拉框裡供選擇的班級資訊是從資料庫的班級表中讀取的而不是在JSP頁面上寫死的,根據自己對Struts機制的理解,我於是採用下面的做法:
1、<a href="addStudent_listClasses.do">中的addStudent_listClasses.do對應的Action的作用是用來在跳轉到學生註冊頁面之前先獲得ActionForm的一個例項,並顯式呼叫ActionForm的reset()方法來初始化學生註冊頁面下拉框中的內容,而這個Action中我是透過Spring把ActionForm注入的,程式碼如下:
public class AddStudent_listClassesAction extends Action {
private ActionForm addStudentForm = null;
public void setAddStudentForm(ActionForm addStudentForm) {
this.addStudentForm = addStudentForm;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
addStudentForm.reset(mapping, request);
request.getSession().setAttribute("addStudentForm", addStudentForm);
return mapping.findForward("showAddStudentPage");
}
}
2、我在學生註冊頁面對應的那個ActionForm的reset()方法中這樣寫:
public class AddStudentForm extends ActionForm {
// 省略其它屬性和setter、getter方法
private Integer classesNo;
// 透過Spring注入
private IClassesService classService = null;
public void setClassService(IClassesService classService) {
this.classService = classService;
}
......
public void reset(ActionMapping mapping, HttpServletRequest request) {
// 從資料庫的classes表中讀取資料設定 班級 下拉選單供選擇
ArrayList classOptions = newArrayList();
Classes classes = null;
// 透過IClassesService介面呼叫相應DAO中的方法查出所有的班級資訊
List<Classes> list=classService.queryAll();
Iterator i=list.iterator();
while(i.hasNext()){
classes=(Classes)i.next();
LabelValueBean option = new LabelValueBean(classes.getClassesName(),classes.getClassesNo().toString());
classOptions.add(option);
}
request.setAttribute("classOptions", classOptions);
}
}
這樣做是達到了功能的實現,可是老師最後說這樣的做法不太好,原因大概是這樣說的:
沒見過在Action裡面注入ActionForm的,不是傳統的做法(我學Java沒幾個月也不太清楚,banq大哥是這樣的嗎?),沒有經過實踐驗證,不知道是否會有潛在的問題。
而老師推薦瞭如下的做法:
在<a href="addStudent_listClasses.do">中的addStudent_listClasses.do對應的Action中不注入ActionForm,而只是在Action中把addStu.jsp中下拉框<html:options property="value" labelProperty="label" collection="classOptions" />中需要的collection的資料準備好,存到request範圍中,也就是把原來我在ActionForm中的reset()做的事搬到這個跳轉的Action中來做,程式碼如下:
public class AddStudent_listClassesAction extends Action {
// 透過Spring注入
private IClassesService classService = null;
public void setClassService(IClassesService classService) {
this.classService = classService;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
// 從資料庫的classes表中讀取資料設定 班級 下拉選單供選擇
ArrayList classOptions = newArrayList();
Classes classes = null;
// 透過IClassesService介面呼叫相應DAO中的方法查出所有的班級資訊
List<Classes> list=classService.queryAll();
Iterator i=list.iterator();
while(i.hasNext()){
classes=(Classes)i.next();
LabelValueBean option = new LabelValueBean(classes.getClassesName(),classes.getClassesNo().toString());
classOptions.add(option);
}
request.setAttribute("classOptions", classOptions);
return mapping.findForward("showAddStudentPage");
}
上面說的兩種做法都是可以達到目的的,我的疑惑是:]用哪一種方法好?好在什麼地方?不好的做法不好在什麼地方?希望banq大哥能抽空幫我解釋一下,感激不盡!!!!
但是我覺得註冊頁面的表單裡的資料應該是由ActionForm來提供的,像我的老師這樣把表單的資料透過其它的途徑提供,有沒有破壞Struts的什麼結構或是什麼的?(我也不太清楚,但總覺得怪怪的,請老大指教!)
[該貼被yame83215於2007年08月04日 10:12修改過]
[該貼被yame83215於2007年08月04日 10:14修改過]
相關文章
- python 詭異問題求助各位大哥Python
- 需要積分,聽說發部落格就有積分,大哥大姐們給個評論
- 實習生用mybatis的一個弱智問題硬控大哥半小時MyBatis
- C++關於DLL中建立套接字的問題(求教)C++
- 請教各位一個關於websocket協議開發的問題Web協議
- 求教個問題
- Elasticsearch中關於transform的一個問題分析ElasticsearchORM
- 大哥危矣,育碧怕是熬不過下一個冬天了
- (求教)關於js函式按值、引用傳遞的問題JS函式
- 我面試過的那些爛技術大哥面試
- 有大哥做過horizon的漢化包嗎
- python 小白求教一個字串顯示問題Python字串
- 關於Integer面試的一個問題面試
- SpringBoot中關於Mybatis使用的三個問題Spring BootMyBatis
- 弗朗西斯註定要當狀元郎的大哥!!!
- 我是Redis,MySQL大哥被我害慘了!RedisMySql
- 關於一個歸檔問題?
- 投稿006期 |我面試過的那些爛技術大哥面試
- Leetcode刷題中關於java的一些小問題LeetCodeJava
- 關於 django-ckeditor 前段使用的一個問題Django
- 金融安全再失守,躲在暗處偷窺你隱私的“老大哥們”,有點多
- 求助各位好心人,頭快炸了
- 請問個位大哥 你們都是從哪裡下載的第三方包呢? 我以前一直用 https://gopm.io 這個 現在不能用了?HTTPGo
- 一個關於ace-editor編輯器的問題
- 求問一個 swipe 的問題,請大神們指教
- 關於工作中遇到的問題
- 關於cuda中的函式問題函式
- 關於 http cache 的一個小問題以及引發的思考HTTP
- 關於Java中分層中遇到的一些問題Java
- 關於Redis的一些小問題Redis
- 大哥退隱,騙子橫行:遊戲公會的魔幻20年遊戲
- 不是,大哥,咱這小門小戶的,別搞我CDN流量啊
- 關於 AppCrawler 執行過程中的幾個小問題APP
- 關於ImageView的幾個常見問題View
- 關於解決問題的幾個段位
- 關於dcat-admin的兩個問題...
- 關於python中填充缺失值的問題Python
- 關於setInterval和setTImeout中的this指向問題
- 關於 mysql 中的 rand () 查詢問題MySql