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修改過]
相關文章
- 求教 banq 大哥關於網際網路問題
- 各位大哥,banq大哥請進,有關jdon版的安裝
- banq大哥,請教一個關於jboss ide的問題IDE
- 小弟請求各位師兄大哥一個面試遇到的問題面試
- banq大哥,有關《Java實用系統開發指南》求教Java
- benq大哥,第七章問題求教ENQ
- 各位大哥,幫忙解決一下這個問題
- 求教:banq大哥怎麼做二次開發?
- 求助關於EJB的部署問題(小弟是初學者,請各位大哥看一下)
- python 詭異問題求助各位大哥Python
- 請問banq大哥,關於com.jdon.model.query.PageIteratorSolver
- 請教banq大哥:資料庫設計的問題!!!資料庫
- banq大哥------只有你才能解決的登陸問題
- 關於Jdon框架和Hibernate的整合,Banq大哥請進框架
- 關於petstore的最新版本? 請banq大哥幫忙
- 關於快取的問題,請板橋大哥指點一下快取
- 【線上等】Tomcat問題高手或者版主或遇到內似問題的大哥大姐來看我這個問題Tomcat
- 各位大哥,jboss配置資料來源的問題,幫幫忙!
- 請教banq大哥SOAP和HTTPHTTP
- 請教banq老師和各位大哥,以下需求應該怎麼分析
- 請教banq大哥,領域模型的設計模型
- 一個遊戲系統,向Banq大哥,以及感興趣的朋友請教!遊戲
- 小弟想做個交友的網站,各位大哥給點意見,網站
- 請問下banq大哥com.jdon.treepatterns.model.TreeModel
- 【線上等】Tomcat執行緒滿導致問題高手或者版主或遇到內似問題的大哥大姐來看我這個問題Tomcat執行緒
- 請教banq 大哥,在jdbc開發中,過多使用static方法會有什麼問題?JDBC
- benq,漿糊,以及各位大哥,你們是否用javamail做過收郵件的程式???ENQJavaAI
- banq老師,求教:關於jf的中forum.jsp的“start”JS
- 各位大蝦和banq大哥請問把所有資料庫操作都放在儲存過程裡合理嗎?資料庫儲存過程
- 對banq大哥"EJB3與EJB2架構比較"一文的提問架構
- banq,你好問一個關於《java使用系統開發指南》的問題Java
- 請教各位大哥,小弟是一名菜鳥,想對公司下面的專案採取如下的分層方式,各位大哥,看看我的想法對不對
- 請教各位一個關於websocket協議開發的問題Web協議
- 對Banq大哥的"EJB3與EJB2架構對比"一文提出疑問?架構
- 有個關於會員頭像應用的問題困惑了很久,請banq和各位道友指教
- C++關於DLL中建立套接字的問題(求教)C++
- 請教benq大哥strategy模式在實際中的一個應用ENQ模式
- 請教板橋大哥及各位高手,這個case是否能用Jdon框架框架