xiaoyu
Weblogic Cluster


性別: 年齡:23 十二宮圖: 加入時間: 2003/10/01 文章: 498 來自: 廣東
|
時間: 2005-4-21 15:56:03?? ?標題:
|
|
|
spring嘟嘟 寫道:
|
xiaoyu 寫道:
|
我的項目就是用spring mvc的..不好用呀......以前討論過.
覺得webwork2不錯...
就單單spring mvc的表單數據綁定就問題很多.
再就是的驗證. |
綁定有什么問題?
驗證就更沒有問題了.. 就寫寫配置文件而已.
|
用用就知道了...
|
|
返回頂端
|
|
|
spring嘟嘟
BEA Weblogic


性別: 年齡:48 十二宮圖: 加入時間: 2004/04/10 文章: 256 來自:
|
時間: 2005-4-21 19:43:54?? ?標題:
|
|
|
xiaoyu 寫道:
|
spring嘟嘟 寫道:
|
xiaoyu 寫道:
|
我的項目就是用spring mvc的..不好用呀......以前討論過.
覺得webwork2不錯...
就單單spring mvc的表單數據綁定就問題很多.
再就是的驗證. |
綁定有什么問題?
驗證就更沒有問題了.. 就寫寫配置文件而已.
|
用用就知道了...
|
都做了5個項目....
不知道要怎么才算用過?
|
|
返回頂端
|
|
|
xiaoyu
Weblogic Cluster


性別: 年齡:23 十二宮圖: 加入時間: 2003/10/01 文章: 498 來自: 廣東
|
時間: 2005-4-21 22:43:02?? ?標題:
|
|
|
喔。。強。。。
問一下,首先對基本類型的綁定問題(非string),當然form表單元素的值為空時,怎么解決?
2.深層綁定是怎么解決(屬性.屬性.屬性)。
3.對于Data(或者Calendar)類型(其實這個是比較典型的)的解釋怎么解決,特別是當不同的Data類型屬性不同的格式解釋怎么解決?
4.對于session里的值的綁定,怎么解決?
5.對于上傳文件,怎么解決?(其實這個我看過解決方法,不過找不到了,不好意思)(文件上傳一般經常用的有兩種,一種是把流存到數據庫,另一種是直接放到服務器的某個文件夾)
6. 對數組(或List)的綁定,例如:表單元素名稱elements[0].id,elements[1].id.
OK,希望spring dudu 能把解決方案寫出來,謝謝了。。其實說spring mvc不好,是因為我對spring mvc不太了解。起碼也只是用在了一個項目上,覺得問題蠻多的,不過很多問題應該是我不了解的原因。。希望spring dudu 幫-幫忙。謝謝
|
|
返回頂端
|
|
|
moxie
Sybase EAServer


性別:
加入時間: 2003/09/16 文章: 96
|
時間: 2005-4-22 18:27:44?? ?標題: Re: 討論一下spring自己的MVC框架
|
|
|
baichenhong 寫道:
|
這里好像沒人提到spring自帶的MVC框架,我最近研究了一下,感覺很不錯。 spring支持多種類型的view,包括jsp、xslt、velocity、pdf、excel等技術。
spring提供多種控制器,其中有簡單的對應一個請求的Controller,對應多個請求的MultiActionController,支持form表單和錯誤綁定功能的SimpleFormController等等,支持url路徑重寫(你可以以各種后綴名來命名)。
個人感覺非常靈活,有多種控制器可用,struts太死板難用,tapstry復雜難度高
另外從中學到了很多東西,jsp的作用就是實現視圖,試圖的功能其實很單一的,用來展現數據。
推薦大家研究研究,有什么優缺點大家討論一下 |
為什么不試試WebWork2呢?
|
|
返回頂端
|
|
|
winterwolf
Weblogic Cluster

加入時間: 2005/01/01 文章: 360
|
時間: 2005-4-23 10:42:17?? ?標題:
|
|
|
表單的驗證和struts的沒什么區別吧 ? 是個通用的驗證工具在哪里都可以借用.
|
|
返回頂端
|
|
|
pikachu
Oracle9iAS

加入時間: 2004/05/08 文章: 161
|
時間: 2005-4-23 20:50:15?? ?標題:
|
|
|
引用:
|
問一下,首先對基本類型的綁定問題(非string),當然form表單元素的值為空時,怎么解決? |
在controller中
java代碼:?
|
protected
void initBinder(HttpServletRequest request, ? ? ? ? ? ? ? ? ? ? ? ? ServletRequestDataBinder binder)throwsException{ ? ? ? ? ? ? ? ? binder.registerCustomEditor(Integer.class,new CustomNumberEditor(Integer.class,true)); ? ? ? ? }
|
或者在spring的配置中配置CustomEditorConfigurer
引用:
|
2.深層綁定是怎么解決(屬性.屬性.屬性)。 |
把你的input命名為 xxx.yyy command中寫上 getXxx .它返回的對象有setYyy方法就ok了
引用:
|
3.對于Data(或者Calendar)類型(其實這個是比較典型的)的解釋怎么解決,特別是當不同的Data類型屬性不同的格式解釋怎么解決? |
原理同第一個,不過換成CustomDateEditor,這個構造傳入一個DateFormat對象
引用:
|
4.對于session里的值的綁定,怎么解決? |
controllor有sessionForm屬性。不過這里有個陷阱。在spring的AbstractCommandFormController中有getCommand方法。如果form被設置成sessionForm,那么這個方法會從session中獲取command,但是馬上就把command從session中刪了
java代碼:?
|
protected
final
Object getCommand(HttpServletRequest request)throwsException{ ? ? ? ? ? ? ? ? if(!isSessionForm()){ ? ? ? ? ? ? ? ? ? ? ? ? return formBackingObject(request); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? HttpSession session = request.getSession(false); ? ? ? ? ? ? ? ? if(session == null){ ? ? ? ? ? ? ? ? ? ? ? ? throw new ServletException("Must have session when trying to bind (in session-form mode)"); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? String formAttrName = getFormSessionAttributeName(request); ? ? ? ? ? ? ? ? Object sessionFormObject = session.getAttribute(formAttrName); ? ? ? ? ? ? ? ? if(sessionFormObject == null){ ? ? ? ? ? ? ? ? ? ? ? ? throw new ServletException("Form object not found in session (in session-form mode)"); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? session.removeAttribute(formAttrName); ? ? ? ? ? ? ? ? return sessionFormObject; ? ? ? ? }
|
所以默認情況下,設置成sessionForm的流程是這樣的
客戶get某個url 因為是get方式,spring判斷不是一個submit,調用showNewForm,同時創建一個Command丟到session中 顯示formView 客戶在form中輸入一些內容 submit form被post,spring判斷是submit而且是sessionForm。調用getCommand,getCommand把command從sessionForm里刪掉 spring調用processFormSubmission然后一直調用到onSubmit,成功的話顯示successView。
所以如果command要一直保存在session中的話,需要每次onSubmit中重新把command丟到session中或者索性重寫processFormSubmission。后一種方法可以參考AbstractWizardForm的做法
引用:
|
5.對于上傳文件,怎么解決?(其實這個我看過解決方法,不過找不到了,不好意思)(文件上傳一般經常用的有兩種,一種是把流存到數據庫,另一種是直接放到服務器的某個文件夾) |
spring沒有現成的一站式解決方案,不過可以用org.springframework.web.multipart 下的輔助類 這里是Srping api中的例子
java代碼:?
|
ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response){ ? ?MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; ? ?MultipartFile multipartFile = multipartRequest.getFile("image"); ? ?... }
|
你也可以在CommandForm中注冊一個ByteArrayMultipartFileEditor 或者StringMultipartFileEditor 至于是要存文件夾還是存數據庫,spring幫不了你,不過拿到所有的byte后隨便做什么都應該不是什么很困難的事了
引用:
|
6. 對數組(或List)的綁定,例如:表單元素名稱elements[0].id,elements[1].id. |
spring支持這種形式的綁定.比如command這樣設計
java代碼:?
|
class Command{ ? publicList getElements(){//} }
|
當然,這個要求List或者數組中有足夠的元素. 我見過另一種做法,是從struts上學來的,自定義一個List實現,重寫get方法.
引用:
|
OK,希望spring dudu 能把解決方案寫出來,謝謝了。。其實說spring mvc不好,是因為我對spring mvc不太了解。起碼也只是用在了一個項目上,覺得問題蠻多的,不過很多問題應該是我不了解的原因。。希望spring dudu 幫-幫忙。謝謝 |
這是robbin的大忌諱,點名貼是要刪的
|
|
返回頂端
|
|
|
spring嘟嘟
BEA Weblogic


性別: 年齡:48 十二宮圖: 加入時間: 2004/04/10 文章: 256 來自:
|
時間: 2005-4-23 22:46:47?? ?標題:
|
|
|
8好意思,去上海兩天剛回來。
已經有人回答了。
不過我想問問啥需求要放在Session里面?
|
|
返回頂端
|
|
|
xiaoyu
Weblogic Cluster


性別: 年齡:23 十二宮圖: 加入時間: 2003/10/01 文章: 498 來自: 廣東
|
時間: 2005-4-23 23:19:50?? ?標題:
|
|
|
首先多謝回答(真是十分多謝,希望加精華,嘻)
可見,spring的mvc是多么的復雜,還沒有結束復雜性呢,請耐心,我再問問。。。嘻
引用:
|
引用:
|
問一下,首先對基本類型的綁定問題(非string),當然form表單元素的值為空時,怎么解決? |
在controller中
java代碼:?
|
protected
void initBinder(HttpServletRequest request, ? ? ? ? ? ? ? ? ? ? ? ? ServletRequestDataBinder binder)throwsException{ ? ? ? ? ? ? ? ? binder.registerCustomEditor(Integer.class,new CustomNumberEditor(Integer.class,true)); ? ? ? ? }
|
或者在spring的配置中配置CustomEditorConfigurer
|
這樣設置后,是不是int取到的默認值是0,Integer是null?
引用:
|
引用:
|
2.深層綁定是怎么解決(屬性.屬性.屬性)。 |
把你的input命名為 xxx.yyy command中寫上 getXxx .它返回的對象有setYyy方法就ok了
|
如果這個屬性是空的(指xxx這個屬性),就會出現空指針異常。。請繼續
引用:
|
引用:
|
3.對于Data(或者Calendar)類型(其實這個是比較典型的)的解釋怎么解決,特別是當不同的Data類型屬性不同的格式解釋怎么解決? |
原理同第一個,不過換成CustomDateEditor,這個構造傳入一個DateFormat對象
|
沒有解決我的問題,我是指不同的屬性要用不同的格式,例如,我的工作日的格式是yyyy-MM-dd(精確到天),但我的操作時間,要精確到分。
還有對Calendar是不是也可以用你上面的方法呢?
引用:
|
引用:
|
4.對于session里的值的綁定,怎么解決? |
controllor有sessionForm屬性。不過這里有個陷阱。在spring的AbstractCommandFormController中有getCommand方法。如果form被設置成sessionForm,那么這個方法會從session中獲取command,但是馬上就把command從session中刪了
java代碼:?
|
protected
final
Object getCommand(HttpServletRequest request)throwsException{ ? ? ? ? ? ? ? ? if(!isSessionForm()){ ? ? ? ? ? ? ? ? ? ? ? ? return formBackingObject(request); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? HttpSession session = request.getSession(false); ? ? ? ? ? ? ? ? if(session == null){ ? ? ? ? ? ? ? ? ? ? ? ? throw new ServletException("Must have session when trying to bind (in session-form mode)"); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? String formAttrName = getFormSessionAttributeName(request); ? ? ? ? ? ? ? ? Object sessionFormObject = session.getAttribute(formAttrName); ? ? ? ? ? ? ? ? if(sessionFormObject == null){ ? ? ? ? ? ? ? ? ? ? ? ? throw new ServletException("Form object not found in session (in session-form mode)"); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? session.removeAttribute(formAttrName); ? ? ? ? ? ? ? ? return sessionFormObject; ? ? ? ? }
|
所以默認情況下,設置成sessionForm的流程是這樣的
客戶get某個url 因為是get方式,spring判斷不是一個submit,調用showNewForm,同時創建一個Command丟到session中 顯示formView 客戶在form中輸入一些內容 submit form被post,spring判斷是submit而且是sessionForm。調用getCommand,getCommand把command從sessionForm里刪掉 spring調用processFormSubmission然后一直調用到onSubmit,成功的話顯示successView。
所以如果command要一直保存在session中的話,需要每次onSubmit中重新把command丟到session中或者索性重寫processFormSubmission。后一種方法可以參考AbstractWizardForm的做法
|
我的要求要這么復雜完成呀,我只希望從session里獲得我需要的屬性值而罷了,例如,我要獲得User對象(操作者),然后自動綁定到我的VO里。
引用:
|
引用:
|
5.對于上傳文件,怎么解決?(其實這個我看過解決方法,不過找不到了,不好意思)(文件上傳一般經常用的有兩種,一種是把流存到數據庫,另一種是直接放到服務器的某個文件夾) |
spring沒有現成的一站式解決方案,不過可以用org.springframework.web.multipart 下的輔助類 這里是Srping api中的例子
java代碼:?
|
ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response){ ? ?MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; ? ?MultipartFile multipartFile = multipartRequest.getFile("image"); ? ?... }
|
你也可以在CommandForm中注冊一個ByteArrayMultipartFileEditor 或者StringMultipartFileEditor 至于是要存文件夾還是存數據庫,spring幫不了你,不過拿到所有的byte后隨便做什么都應該不是什么很困難的事了
|
果然。。。。。。。。唉。。。。。。。
引用:
|
引用:
|
6. 對數組(或List)的綁定,例如:表單元素名稱elements[0].id,elements[1].id. |
spring支持這種形式的綁定.比如command這樣設計
java代碼:?
|
class Command{ ? publicList getElements(){//} }
|
當然,這個要求List或者數組中有足夠的元素. 我見過另一種做法,是從struts上學來的,自定義一個List實現,重寫get方法.
|
你是指我數組或List不能為空嗎?getElements()返回的不能是null?如果是null怎么辦?
引用:
|
引用:
|
OK,希望spring dudu 能把解決方案寫出來,謝謝了。。其實說spring mvc不好,是因為我對spring mvc不太了解。起碼也只是用在了一個項目上,覺得問題蠻多的,不過很多問題應該是我不了解的原因。。希望spring dudu 幫-幫忙。謝謝 |
這是robbin的大忌諱,點名貼是要刪的
|
呵 可。。在這里認個錯,對不起,因為覺得javaeye沒有幾個去研究這個復雜的mvc所以就,再說spring dudu 用了五個項目,所以希望他能給出一起經驗,對學習和推廣這個mvc有很大的作用。
謝謝。。。。
to spring dudu:沒有關系,嘻嘻。。。。
|
|
返回頂端
|
|
|
pikachu
Oracle9iAS

加入時間: 2004/05/08 文章: 161
|
時間: 2005-4-24 12:22:46?? ?標題:
|
|
|
引用:
|
這樣設置后,是不是int取到的默認值是0,Integer是null?
|
不好意思,昨天的回答想當然而。不全對。 正確的答案是,如果要綁定到int基本類型,需要自定義一個IntEditor
java代碼:?
|
public
class CustIntEditor extends IntEditor{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* (non-Javadoc) ? ? ? ? ? ? ? ? * @see java.beans.PropertyEditor#setAsText(java.lang.String) ? ? ? ? ? ? ? ? */ ? ? ? ? ? ? ? ? publicvoid setAsText(String text)throwsIllegalArgumentException{ ? ? ? ? ? ? ? ? ? ? ? ? if(text==null||text.equals("")){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? super.setAsText("0"); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? else{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? super.setAsText(text); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } }
|
然后用Integer.TYPE進行注冊。
java代碼:?
|
binder.registerCustomEditor(Integer.TYPE,new CustIntEditor());
|
Integer類型的回答是對的 btw:要是Spring用Ognl綁定估計也不會象現在那么麻煩了。
引用:
|
如果這個屬性是空的(指xxx這個屬性),就會出現空指針異常。。請繼續[/b] |
我想即使是webwork或者tapestry等綁定作的比較好的也不能很好的滿足你的要求。本質上,不管用PropertyEditor還是Ognl,任何深層綁定最終都是 a.getB().getC().setD(dValue); 至于當中get鏈能否正常,全靠自己把握了。考慮到繼承和派生,外圍框架更不可能知道你的get鏈中返回的是什么類型,也不可能幫你創一個中間的對象并且set。 一般的做法是寫上一段guard
java代碼:?
|
public B getB(){ ? if(this.b==null){ ? ? ?this.b=new BImpl(); //guard code here ? } return this.b; }
|
引用:
|
沒有解決我的問題,我是指不同的屬性要用不同的格式,例如,我的工作日的格式是yyyy-MM-dd(精確到天),但我的操作時間,要精確到分。 還有對Calendar是不是也可以用你上面的方法呢?
|
說實話我覺得這種要求比較過分  解決方法取決于你的實際情況 如果你對日期的不同精度要求是在兩個controllor中那很好辦,每個controllor注冊自己所需要的日期型的CustomDateEditor。構造時傳入不同pattern的format。 如果是在同一個controllor中,那就比較惱火了。因為將一個高精度的值向低精度格式綁定會丟失精度,而低精度的值向高精度格式綁定會出錯。用哪個都不滿意。 現在我想到的方法是采用最高精度的日期格式。低精度的屬性在綁定前把值加0,把自己弄成高精度的樣子。不過因為spring自帶的formControllor已經把很多寫死了,只能在頁面上動用script了。 還有個辦法是自己寫一個Date的PropertyEditor。 Calendar沒有默認的PropertyEditor。不過可以參考spring中CustomDateEditor的做法,把string轉成Date然后再從Date轉成Calendar。
引用:
|
我的要求要這么復雜完成呀,我只希望從session里獲得我需要的屬性值而罷了,例如,我要獲得User對象(操作者),然后自動綁定到我的VO里。
|
spring中bind完全是bean的機制,和session無關。一般只能在controllor中手工從session獲得再手工綁定到VO里。 btw,我覺得這個不是也不應該是bind的用途。如果在Spring里,你可以在Controllor中這樣寫
java代碼:?
|
protected
Object formBackingObject(HttpServletRequest request) ? ? ? ? ? ? ? ? ? ? ? ? throwsException{ ? ? ? ? ? ? ? ? Object cmd=super.formBackingObject(request); ? ? ? ? ? ? ? ? if(cmd instanceof UserSettable){ ? ? ? ? ? ? ? ? ? ? ? ? ((UserSettable)cmd).setUser(request.getSession().getAttribute("user")); ? ? ? ? ? ? ? ? } //? ? ? ? ? ? ? ? 或者用beanWrapper調用reflect //? ? ? ? ? ? ? ? BeanWrapperImpl bw=new BeanWrapperImpl(cmd.getClass()); //? ? ? ? ? ? ? ? bw.setWrappedInstance(cmd) //? ? ? ? ? ? ? ? bw.setPropertyValue("user",request.getSession().getAttribute("user")); ? ? ? ? ? ? ? ? return cmd; ? ? ? ? }
|
引用:
|
你是指我數組或List不能為空嗎?getElements()返回的不能是null?如果是null怎么辦?
|
首先不能為空,其次list和數組的長度要足夠,最后element要是正確的類型 比如 cmd.elements[1].id=3; 那最后調用樣子的必然是 cmd.getElements().get(1).setId(3);而且要保證這條鏈不能錯 同樣模仿上面guard,自定義一個list是不錯的做法,比如
java代碼:?
|
class UserList extendsArrayList<User> {
? ? ? ? public User get(int index){ ? ? ? ? ? ? ? ? if(size()<index+1){ ? ? ? ? ? ? ? ? ? ? ? ? int s=size(); ? ? ? ? ? ? ? ? ? ? ? ? for(int i=s;i<=index-s;++i){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? add(i,new User()); ? ? ? ? ? ? ? ? ? ? ? ? }} ? ? ? ? ? ? ? ? return super.get(index); ? ? ? ? } ? ? ? ? }
|
引用:
|
呵 可。。在這里認個錯,對不起,因為覺得javaeye沒有幾個去研究這個復雜的mvc所以就,再說spring dudu 用了五個項目,所以希望他能給出一起經驗,對學習和推廣這個mvc有很大的作用。
謝謝。。。。
to spring dudu:沒有關系,嘻嘻。。。。
|
我比較另類,第一個看的mvc就是spring,因為從去年下半年才開始接觸的java,所以struts什么的都沒好好看  如果只是簡單的應用,spring mvc功能就足夠了。如果應用中有特殊點就需要去弄一些比較煩人的東西。 spring的開發理念和其他常見的項目有很大的區別。它搭好了一個框子,提供很多擴展口。但是提供的最后成品很少。除了ioc,mvc和transcation部分,其他的基本上都是構建在別人的項目上的。而ioc中的beanwrapper又使用了propertyEditor,這個靈活度極其高。mvc部分也很松散,留下很多擴展的空間,可能這就是它自稱的plugable的原因之一吧。最終的結果是spring確實很靈活,也有足夠的擴展點。但是為了完成擴展又需要看一些非spring的東西。
不過只要有足夠時間,看spring代碼會學到很多東西的,我倒是挺喜歡的
|
|
返回頂端
|
|
|
xiaoyu
Weblogic Cluster


性別: 年齡:23
加入時間: 2003/10/01 文章: 498 來自: 廣東
|
時間: 2005-4-24 14:28:44?? ?標題:
|
|
|
這個星期最開心的事就是這個了.真是謝謝.太感謝了.
看來我對mvc的了解沒有太多的出入,現在只等spring dudu的見解了。
這就是spring的綁定問題(spring dudu先生請看)。
我是自已重寫了formData綁定這部分,如果get是一個空對象,我就會建立這個對象(這個對象必須要有一個沒參的構造子),并且set。怎么知道這個對象的類型,很簡單,其實PropertyEditor能夠獲得返回類型(return Type),注意這個對象必須是可以構造的class,考慮到PO,所以屬性很少可能會是interface和abstract class(集合類除外)。所以對數組一樣可以,就算是空對象,也可以建立數組,并且建立數組元素,但對于List就沒有很好的辦法,因為沒有返回類型,除非用元數據(覺得這種方法最沒有侵入),或者建立一種自己的格式(表單字段名的約定),然后進行解釋。當然對于基本類型是可以很好地進行解釋。
有一個朋友說可以在SimpleFormController的formBackingObject(request); 這個方法里設置你需要的get對象。
對于自定義的屬性進行不同的解釋,一是采用webwork2的做法,在類的目錄下同時有一個propreties文件,里面指定要用哪種方法。還有一種是用元數據,這個就是沒有其它的配置文件。但卻不能隨便改變。
可以采用webwork2的做法,所有request,servletContext,session里的值都放到一個context里面去,但優先級,我就不太清楚如何才好。
btw:如果我要獲得servletContext里面的值,不知道在spring的controller怎么獲得呢?
|
|
返回頂端
|
|
|
pikachu
Oracle9iAS

加入時間: 2004/05/08 文章: 161
|
時間: 2005-4-24 16:42:34?? ?標題:
|
|
|
xiaoyu 寫道:
|
這個星期最開心的事就是這個了.真是謝謝.太感謝了.
看來我對mvc的了解沒有太多的出入,現在只等spring dudu的見解了。
這就是spring的綁定問題(spring dudu先生請看)。
我是自已重寫了formData綁定這部分,如果get是一個空對象,我就會建立這個對象(這個對象必須要有一個沒參的構造子),并且set。怎么知道這個對象的類型,很簡單,其實PropertyEditor能夠獲得返回類型(return Type),注意這個對象必須是可以構造的class,考慮到PO,所以屬性很少可能會是interface和abstract class(集合類除外)。所以對數組一樣可以,就算是空對象,也可以建立數組,并且建立數組元素,但對于List就沒有很好的辦法,因為沒有返回類型,除非用元數據(覺得這種方法最沒有侵入),或者建立一種自己的格式(表單字段名的約定),然后進行解釋。當然對于基本類型是可以很好地進行解釋。
有一個朋友說可以在SimpleFormController的formBackingObject(request); 這個方法里設置你需要的get對象。
對于自定義的屬性進行不同的解釋,一是采用webwork2的做法,在類的目錄下同時有一個propreties文件,里面指定要用哪種方法。還有一種是用元數據,這個就是沒有其它的配置文件。但卻不能隨便改變。
可以采用webwork2的做法,所有request,servletContext,session里的值都放到一個context里面去,但優先級,我就不太清楚如何才好。
btw:如果我要獲得servletContext里面的值,不知道在spring的controller怎么獲得呢? |
對于自定義屬性,要么外部配置,要么用些高級技術 比如jdk1.5的增加的getTypeParameters() formBackingObject確實是formControllor中獲取command的方法。如果你沒有重寫formBackingObject,spring的默認實現使用reflect返回的。 在controllor中可以用onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) 。有了request,我們的生活就會非常美好!!
|
|
返回頂端
|
|
|
xiaoyu
Weblogic Cluster


性別: 年齡:23
加入時間: 2003/10/01 文章: 498 來自: 廣東
|
時間: 2005-4-24 18:21:21?? ?標題:
|
|
|
但有request卻是那么的難測試。。唉。。。。
|
|
返回頂端
|
|
|
spring嘟嘟
BEA Weblogic


性別: 年齡:48 十二宮圖: 加入時間: 2004/04/10 文章: 256 來自:
|
時間: 2005-4-24 22:05:39?? ?標題:
|
|
|
雖然Spring的Web測試有他自己的Mock
不過我不會對Action這塊做測試的,簡直是浪費時間。
|
|
返回頂端
|
|
|
spring嘟嘟
BEA Weblogic


性別: 年齡:48 十二宮圖: 加入時間: 2004/04/10 文章: 256 來自:
|
時間: 2005-4-24 22:09:40?? ?標題:
|
|
|
這就是spring的綁定問題(spring dudu先生請看)。
我是自已重寫了formData綁定這部分,如果get是一個空對象,我就會建立這個對象(這個對象必須要有一個沒參的構造子),并且set。怎么知道這個對象的類型,很簡單,其實PropertyEditor能夠獲得返回類型(return Type),注意這個對象必須是可以構造的class,考慮到PO,所以屬性很少可能會是interface和abstract class(集合類除外)。所以對數組一樣可以,就算是空對象,也可以建立數組,并且建立數組元素,但對于List就沒有很好的辦法,因為沒有返回類型,除非用元數據(覺得這種方法最沒有侵入),或者建立一種自己的格式(表單字段名的約定),然后進行解釋。當然對于基本類型是可以很好地進行解釋。
沒看明白,你這段話是在說什么問題。。。
能解釋一下嗎?
|
|
返回頂端
|
|
|
xiaoyu
Weblogic Cluster


性別: 年齡:23 十二宮圖: 加入時間: 2003/10/01 文章: 498 來自: 廣東
|
時間: 2005-4-24 22:51:27?? ?標題:
|
|
|
呵呵。。其實沒有什么。。我只是說了我的解決方案(因為我是重寫了formData綁定部分)。
講到底spring 的mvc是個復雜的MVC。
而且綁定的問題就是我上面提出來的。
不是嗎?還不知道spring dudu的解決方案是不是與pikachu一樣。
對于spring mvc如果獲得context里的值,我還不是很清楚。。
|
|
spring嘟嘟
BEA Weblogic


性別: 年齡:48 十二宮圖: 加入時間: 2004/04/10 文章: 256 來自:
|
時間: 2005-4-25 09:04:57?? ?標題:
|
|
|
前面的項目和他差不多.
現在改用xmlhttp做了,所以就沒用spring的bind了.
嘿嘿,現在只要寫配置文件就好
|
|
返回頂端
|
|
|
xiaoyu
Weblogic Cluster


性別: 年齡:23 十二宮圖: 加入時間: 2003/10/01 文章: 498 來自: 廣東
|
時間: 2005-4-25 17:58:27?? ?標題:
|
|
|
再講一個spring mvc的問題。
如果一個表單需要多個PO(VO),怎么辦?難道除了只寫一個包函的VO就沒有其它的方法了嗎?
|
|
返回頂端
|
|
|
spring嘟嘟
BEA Weblogic


性別: 年齡:48 十二宮圖: 加入時間: 2004/04/10 文章: 256 來自:
|
時間: 2005-4-25 19:29:35?? ?標題:
|
|
|
xiaoyu 寫道:
|
再講一個spring mvc的問題。
如果一個表單需要多個PO(VO),怎么辦?難道除了只寫一個包函的VO就沒有其它的方法了嗎? |
是的
我沒找到...
|
|
返回頂端
|
|
|
大愚弱智
Sybase EAServer


性別: 年齡:24 十二宮圖: 加入時間: 2004/08/21 文章: 77 來自: 北京
|
時間: 2005-4-27 17:53:52?? ?標題:
|
|
|
[quote="xiaoyu"]再講一個spring mvc的問題。
如果一個表單需要多個PO(VO),怎么辦?難道除了只寫一個包函的VO就沒有其它的方法了嗎? [/quote]
多個PO?formBackingObject只能返回一個PO(VO),如果要返回多個東東,使用 referenceData返回的是一個Map,在Map里面你愛裝傻就裝啥。例如一個Map里面裝上一個List或Map,然后這個List或Map再裝其它的東西,你的需求是不是這樣子的呢?
|
|
返回頂端
|
|
|
大愚弱智
Sybase EAServer


性別: 年齡:24 十二宮圖: 加入時間: 2004/08/21 文章: 77 來自: 北京
|
|
返回頂端
|
|
|
spring嘟嘟
BEA Weblogic


性別: 年齡:48 十二宮圖: 加入時間: 2004/04/10 文章: 256 來自:
|
時間: 2005-4-28 12:24:43?? ?標題:
|
|
|
生成驗證的Xdoclet本來就有
運行時怎么會動態更改驗證?
我在http://cosoft.org.cn/projects/jsvalidation找到一個js驗證framework,這是一個很漂亮的驗證framework(只是國產的而已,經理不是很喜歡),不用重新啟動服務器,很好用!
這個有什么用,別人關閉JS驗證的時候,就不能自動使用后臺驗證了
|
|
返回頂端
|
|
|
xiaoyu
Weblogic Cluster


性別: 年齡:23 十二宮圖: 加入時間: 2003/10/01 文章: 498 來自: 廣東
|
時間: 2005-4-28 12:59:41?? ?標題:
|
|
|
大愚弱智 寫道:
|
xiaoyu 寫道:
|
再講一個spring mvc的問題。
如果一個表單需要多個PO(VO),怎么辦?難道除了只寫一個包函的VO就沒有其它的方法了嗎?
|
多個PO?formBackingObject只能返回一個PO(VO),如果要返回多個東東,使用 referenceData返回的是一個Map,在Map里面你愛裝傻就裝啥。例如一個Map里面裝上一個List或Map,然后這個List或Map再裝其它的東西,你的需求是不是這樣子的呢?
|
不是,我要的是頁面-->controller(提交多個PO或VO),不是controller-->頁面
|
|
返回頂端
|
|
|
大愚弱智
Sybase EAServer


性別: 年齡:24 十二宮圖: 加入時間: 2004/08/21 文章: 77 來自: 北京
|
時間: 2005-4-28 14:09:03?? ?標題:
|
|
|
[quote="spring嘟嘟"]生成驗證的Xdoclet本來就有 運行時怎么會動態更改驗證? [/quote]
spring生成驗證xdoclet的是有的,我用過一陣子,覺得不好用。
不是運行時的更改,而是我們測試的時候頻繁的更改配置文件。
后臺驗證有后臺驗證的好長,但使用js驗證也自然有其好處:那就是可以在客戶端驗證,不必提交到服務器。
|
|
返回頂端
|
|
|
xiaoyu
Weblogic Cluster


性別: 年齡:23 十二宮圖: 加入時間: 2003/10/01 文章: 498 來自: 廣東
|
時間: 2005-4-30 09:29:22?? ?標題:
|
|
|
大愚弱智:
引用:
|
另外,Spring的可配置客戶端驗證問題,spring借用struts的驗證機制,我用過一陣子,每更改一下配置文件,就得重新啟動服務器,感覺不是很好用 |
server端的驗證為什么要重啟?我想不明白.
spring的驗證是可以直接new一個驗證類,然后做測試的.有必要用容器嗎?
js,是有必要,但如果單單靠js就是找死.
|
|
返回頂端
|
|
|
大愚弱智
Sybase EAServer


性別: 年齡:24 十二宮圖: 加入時間: 2004/08/21 文章: 77 來自: 北京
|
時間: 2005-4-30 10:56:34?? ?標題:
|
|
|
checkbox綁定到boolean的問題我還沒解決,CustomBooleanEditor它只能綁定到Boolean,而不是boolean,只能使用request.getParameter來取得checkbox的值。
----這個問題誰能幫我解決一下
|
|
返回頂端
|
|
|
大愚弱智
Sybase EAServer


性別: 年齡:24 十二宮圖: 加入時間: 2004/08/21 文章: 77 來自: 北京
|
時間: 2005-4-30 13:32:24?? ?標題:
|
|
|
所有的問題都已經解決了!只是你們敢不敢使用新的“SpringMVC”,這個新的“SpringMVC”就是Aurora MVC Framework,在Spring的官方網站有貼出。我下載看了一下,這是SpringMVC的實踐著在總結了SpringMVC的各種毛病之后搞出來的一個估計是為替代SpringMVC的框架。
例如對于xiaoyun所說的提交多個bo的問題,上面有解釋: With Aurora, the framework uses metadata placed in your configuration files to map request values to your domain objects. Thus, you can edit one object, or even several, on the same form. The framework uses reflection to map each individual request value to your domain object just before your custom processing logic is executed. Of course, you are not locked into this approach since sometimes you won't want to map to domain objects - you can declare non-domain object values in the same way but you can still leverage every other aspect of the framework to keep things consistent. Thus, in almost all cases, you won't have to deal with the HttpServletRequest object at all, but the framework does not shield you from it either like other MVC frameworks do.
對于多選列表問題,它是這樣解決的: <SelectMany name="company.types" referenceData="types" validatorId="multireference" errorMessage="There are no company types in the database." > <Text /> </SelectMany>
這是很好的一個MVC框架,可以作為SpringMVC的代替,值得我們好好研究。
|
|
返回頂端
|
|
|
xiaoyu
Weblogic Cluster


性別: 年齡:23 十二宮圖: 加入時間: 2003/10/01 文章: 498 來自: 廣東
|
|
返回頂端
|
|
|
大愚弱智
Sybase EAServer


性別: 年齡:24 十二宮圖: 加入時間: 2004/08/21 文章: 77 來自: 北京
|
時間: 2005-4-30 20:24:31?? ?標題:
|
|
|
我正在研究Aurora MVC Framework,說不準,里面已經解決好了呢。 Aurora MVC Framework的FormController和其它Controller都派生在Spring的Controller,返回的也是ModelAndView。里面還提供了n多的HTML控件,Validator控件,Javascript都附帶好了,都是為了解決SpringMVC的很多問題而做的,值得我們這幫SpringMVC狂好好研究一下!
|
|
posted on 2006-09-07 18:04
OMG 閱讀(3843)
評論(0) 編輯 收藏 所屬分類:
Spring