OMG,到底在寻找什么..................
(构造一个完美的J2EE系统所需要的完整知识体系)
posts - 198,  comments - 37,  trackbacks - 0
xiaoyu
Weblogic Cluster
Weblogic Cluster


性别:性别:男
年龄:23
十二宫图:白羊宫
加入时间: 2003/10/01
文章: 498
来自: 广东
离线

文章 时间: 2005-4-21 15:56:03    标题: 引用回复 将这个帖子加入我的Blog

spring嘟嘟 写道:
xiaoyu 写道:
我的项目就是用spring mvc的..不好用呀......以前讨论过.

觉得webwork2不错...

就单单spring mvc的表单数据绑定就问题很多.

再就是的验证.

绑定有什么问题?


验证就更没有问题了.. 就写写配置文件而已.


用用就知道了...
返回顶端
阅读会员资料 发送站内短信 发送电子邮件
spring嘟嘟
BEA Weblogic
BEA Weblogic


性别:性别:男
年龄:48
十二宫图:天平宫
加入时间: 2004/04/10
文章: 256
来自:
离线

文章 时间: 2005-4-21 19:43:54    标题: 引用回复 将这个帖子加入我的Blog

xiaoyu 写道:
spring嘟嘟 写道:
xiaoyu 写道:
我的项目就是用spring mvc的..不好用呀......以前讨论过.

觉得webwork2不错...

就单单spring mvc的表单数据绑定就问题很多.

再就是的验证.

绑定有什么问题?


验证就更没有问题了.. 就写写配置文件而已.


用用就知道了...


都做了5个项目....

不知道要怎么才算用过?
返回顶端
阅读会员资料 发送站内短信 发送电子邮件 浏览发表者的主页
xiaoyu
Weblogic Cluster
Weblogic Cluster


性别:性别:男
年龄:23
十二宫图:白羊宫
加入时间: 2003/10/01
文章: 498
来自: 广东
离线

文章 时间: 2005-4-21 22:43:02    标题: 引用回复 将这个帖子加入我的Blog

喔。。强。。。

问一下,首先对基本类型的绑定问题(非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
Sybase EAServer


性别:性别:男


加入时间: 2003/09/16
文章: 96

离线

文章 时间: 2005-4-22 18:27:44    标题: Re: 讨论一下spring自己的MVC框架 引用回复 将这个帖子加入我的Blog

baichenhong 写道:
这里好像没人提到spring自带的MVC框架,我最近研究了一下,感觉很不错。
spring支持多种类型的view,包括jsp、xslt、velocity、pdf、excel等技术。

spring提供多种控制器,其中有简单的对应一个请求的Controller,对应多个请求的MultiActionController,支持form表单和错误绑定功能的SimpleFormController等等,支持url路径重写(你可以以各种后缀名来命名)。

个人感觉非常灵活,有多种控制器可用,struts太死板难用,tapstry复杂难度高

另外从中学到了很多东西,jsp的作用就是实现视图,试图的功能其实很单一的,用来展现数据。

推荐大家研究研究,有什么优缺点大家讨论一下


为什么不试试WebWork2呢?
返回顶端
阅读会员资料 发送站内短信 浏览发表者的主页
winterwolf
Weblogic Cluster
Weblogic Cluster





加入时间: 2005/01/01
文章: 360

离线

文章 时间: 2005-4-23 10:42:17    标题: 引用回复 将这个帖子加入我的Blog

表单的验证和struts的没什么区别吧 ? 是个通用的验证工具在哪里都可以借用.
返回顶端
阅读会员资料 发送站内短信
pikachu
Oracle9iAS
Oracle9iAS





加入时间: 2004/05/08
文章: 161

离线

文章 时间: 2005-4-23 20:50:15    标题: 引用回复 将这个帖子加入我的Blog

引用:
问一下,首先对基本类型的绑定问题(非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的大忌讳,点名贴是要删的 Shocked
返回顶端
阅读会员资料 发送站内短信 发送电子邮件
spring嘟嘟
BEA Weblogic
BEA Weblogic


性别:性别:男
年龄:48
十二宫图:天平宫
加入时间: 2004/04/10
文章: 256
来自:
离线

文章 时间: 2005-4-23 22:46:47    标题: 引用回复 将这个帖子加入我的Blog

8好意思,去上海两天刚回来。

已经有人回答了。

不过我想问问啥需求要放在Session里面?
返回顶端
阅读会员资料 发送站内短信 发送电子邮件 浏览发表者的主页
xiaoyu
Weblogic Cluster
Weblogic Cluster


性别:性别:男
年龄:23
十二宫图:天平宫
加入时间: 2003/10/01
文章: 498
来自: 广东
离线

文章 时间: 2005-4-23 23:19:50    标题: 引用回复 将这个帖子加入我的Blog

首先多谢回答(真是十分多谢,希望加精华,嘻)

可见,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的大忌讳,点名贴是要删的 Shocked


呵 可。。在这里认个错,对不起,因为觉得javaeye没有几个去研究这个复杂的mvc所以就,再说spring dudu 用了五个项目,所以希望他能给出一起经验,对学习和推广这个mvc有很大的作用。

谢谢。。。。

to spring dudu:没有关系,嘻嘻。。。。
返回顶端
阅读会员资料 发送站内短信 发送电子邮件
pikachu
Oracle9iAS
Oracle9iAS





加入时间: 2004/05/08
文章: 161

离线

文章 时间: 2005-4-24 12:22:46    标题: 引用回复 将这个帖子加入我的Blog

引用:
这样设置后,是不是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是不是也可以用你上面的方法呢?

说实话我觉得这种要求比较过分 Twisted Evil
解决方法取决于你的实际情况
如果你对日期的不同精度要求是在两个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;
        }






引用:
果然。。。。。。。。唉。。。。。。。

Very Happy


引用:
你是指我数组或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什么的都没好好看 Embarassed
如果只是简单的应用,spring mvc功能就足够了。如果应用中有特殊点就需要去弄一些比较烦人的东西。
spring的开发理念和其他常见的项目有很大的区别。它搭好了一个框子,提供很多扩展口。但是提供的最后成品很少。除了ioc,mvc和transcation部分,其他的基本上都是构建在别人的项目上的。而ioc中的beanwrapper又使用了propertyEditor,这个灵活度极其高。mvc部分也很松散,留下很多扩展的空间,可能这就是它自称的plugable的原因之一吧。最终的结果是spring确实很灵活,也有足够的扩展点。但是为了完成扩展又需要看一些非spring的东西。

不过只要有足够时间,看spring代码会学到很多东西的,我倒是挺喜欢的 Laughing
返回顶端
阅读会员资料 发送站内短信 发送电子邮件
xiaoyu
Weblogic Cluster
Weblogic Cluster


性别:性别:男
年龄:23

加入时间: 2003/10/01
文章: 498
来自: 广东
离线

文章 时间: 2005-4-24 14:28:44    标题: 引用回复 将这个帖子加入我的Blog

这个星期最开心的事就是这个了.真是谢谢.太感谢了.

看来我对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
Oracle9iAS





加入时间: 2004/05/08
文章: 161

离线

文章 时间: 2005-4-24 16:42:34    标题: 引用回复 将这个帖子加入我的Blog

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怎么获得呢?


对于自定义属性,要么外部配置,要么用些高级技术 Laughing 比如jdk1.5的增加的getTypeParameters()
formBackingObject确实是formControllor中获取command的方法。如果你没有重写formBackingObject,spring的默认实现使用reflect返回的。
在controllor中可以用onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) 。有了request,我们的生活就会非常美好!! Very Happy
返回顶端
阅读会员资料 发送站内短信 发送电子邮件
xiaoyu
Weblogic Cluster
Weblogic Cluster


性别:性别:男
年龄:23

加入时间: 2003/10/01
文章: 498
来自: 广东
离线

文章 时间: 2005-4-24 18:21:21    标题: 引用回复 将这个帖子加入我的Blog

但有request却是那么的难测试。。唉。。。。
返回顶端
阅读会员资料 发送站内短信 发送电子邮件
spring嘟嘟
BEA Weblogic
BEA Weblogic


性别:性别:男
年龄:48
十二宫图:天平宫
加入时间: 2004/04/10
文章: 256
来自:
离线

文章 时间: 2005-4-24 22:05:39    标题: 引用回复 将这个帖子加入我的Blog

虽然Spring的Web测试有他自己的Mock

不过我不会对Action这块做测试的,简直是浪费时间。
返回顶端
阅读会员资料 发送站内短信 发送电子邮件 浏览发表者的主页
spring嘟嘟
BEA Weblogic
BEA Weblogic


性别:性别:男
年龄:48
十二宫图:天平宫
加入时间: 2004/04/10
文章: 256
来自:
离线

文章 时间: 2005-4-24 22:09:40    标题: 引用回复 将这个帖子加入我的Blog

这就是spring的绑定问题(spring dudu先生请看)。

我是自已重写了formData绑定这部分,如果get是一个空对象,我就会建立这个对象(这个对象必须要有一个没参的构造子),并且set。怎么知道这个对象的类型,很简单,其实PropertyEditor能够获得返回类型(return Type),注意这个对象必须是可以构造的class,考虑到PO,所以属性很少可能会是interface和abstract class(集合类除外)。所以对数组一样可以,就算是空对象,也可以建立数组,并且建立数组元素,但对于List就没有很好的办法,因为没有返回类型,除非用元数据(觉得这种方法最没有侵入),或者建立一种自己的格式(表单字段名的约定),然后进行解释。当然对于基本类型是可以很好地进行解释。


没看明白,你这段话是在说什么问题。。。

能解释一下吗?
返回顶端
阅读会员资料 发送站内短信 发送电子邮件 浏览发表者的主页
xiaoyu
Weblogic Cluster
Weblogic Cluster


性别:性别:男
年龄:23
十二宫图:天平宫
加入时间: 2003/10/01
文章: 498
来自: 广东
离线

文章 时间: 2005-4-24 22:51:27    标题: 引用回复 将这个帖子加入我的Blog

呵呵。。其实没有什么。。我只是说了我的解决方案(因为我是重写了formData绑定部分)。

讲到底spring 的mvc是个复杂的MVC。

而且绑定的问题就是我上面提出来的。

不是吗?还不知道spring dudu的解决方案是不是与pikachu一样。

对于spring mvc如果获得context里的值,我还不是很清楚。。
spring嘟嘟
BEA Weblogic
BEA Weblogic


性别:性别:男
年龄:48
十二宫图:天平宫
加入时间: 2004/04/10
文章: 256
来自:
离线

文章 时间: 2005-4-25 09:04:57    标题: 引用回复 将这个帖子加入我的Blog

前面的项目和他差不多.

现在改用xmlhttp做了,所以就没用spring的bind了.

嘿嘿,现在只要写配置文件就好
返回顶端
阅读会员资料 发送站内短信 发送电子邮件 浏览发表者的主页
xiaoyu
Weblogic Cluster
Weblogic Cluster


性别:性别:男
年龄:23
十二宫图:白羊宫
加入时间: 2003/10/01
文章: 498
来自: 广东
离线

文章 时间: 2005-4-25 17:58:27    标题: 引用回复 将这个帖子加入我的Blog

再讲一个spring mvc的问题。

如果一个表单需要多个PO(VO),怎么办?难道除了只写一个包函的VO就没有其它的方法了吗?
返回顶端
阅读会员资料 发送站内短信 发送电子邮件
spring嘟嘟
BEA Weblogic
BEA Weblogic


性别:性别:男
年龄:48
十二宫图:天平宫
加入时间: 2004/04/10
文章: 256
来自:
离线

文章 时间: 2005-4-25 19:29:35    标题: 引用回复 将这个帖子加入我的Blog

xiaoyu 写道:
再讲一个spring mvc的问题。

如果一个表单需要多个PO(VO),怎么办?难道除了只写一个包函的VO就没有其它的方法了吗?

是的

我没找到...
返回顶端
阅读会员资料 发送站内短信 发送电子邮件 浏览发表者的主页
大愚弱智
Sybase EAServer
Sybase EAServer


性别:性别:男
年龄:24
十二宫图:白羊宫
加入时间: 2004/08/21
文章: 77
来自: 北京
离线

文章 时间: 2005-4-27 17:53:52    标题: 引用回复 将这个帖子加入我的Blog

[quote="xiaoyu"]再讲一个spring mvc的问题。

如果一个表单需要多个PO(VO),怎么办?难道除了只写一个包函的VO就没有其它的方法了吗?
[/quote]



多个PO?formBackingObject只能返回一个PO(VO),如果要返回多个东东,使用 referenceData返回的是一个Map,在Map里面你爱装傻就装啥。例如一个Map里面装上一个List或Map,然后这个List或Map再装其它的东西,你的需求是不是这样子的呢?
返回顶端
阅读会员资料 发送站内短信
大愚弱智
Sybase EAServer
Sybase EAServer


性别:性别:男
年龄:24
十二宫图:白羊宫
加入时间: 2004/08/21
文章: 77
来自: 北京
离线




文章 时间: 2005-4-27 18:04:09    标题: 引用回复 将这个帖子加入我的Blog

checkbox绑定到boolean的问题我还没解决,CustomBooleanEditor它只能绑定到Boolean,而不是boolean,只能使用request.getParameter来取得checkbox的值。
-------------------------
另外,Spring的可配置客户端验证问题,spring借用struts的验证机制,我用过一阵子,每更改一下配置文件,就得重新启动服务器,感觉不是很好用。我在http://cosoft.org.cn/projects/jsvalidation找到一个js验证framework,这是一个很漂亮的验证framework(只是国产的而已,经理不是很喜欢),不用重新启动服务器,很好用!
上面还介绍了生成该验证的xdoclet,但我找了老半天都找不到DocletTask的jar包,无奈,只好自己写了一个xdoclet--嘿嘿,只是编写xdoclet的模板文件而已,我把它上传上来,大家喜欢的话就download看一下,生成javascript的xdoclet可以用了,效果很不错。
-----------------------------
我前一段时间还想定制spring的xdoclet,比如:
对于一个FormController,在头文件声明@spring.urlMapping url="myFormControllerFC.htm"就可以往urlMapping里面增加一个值;
对于MultiActionController,声明@spring.urlMapping ,在每一个Action声明@spring.url url="myAction.htm",使其同时生成两个bean;
对容器管理的bean,只要在一个method上面声明@spring.traction tractionType="read only"也可以生成两个bean
只是想法而已,还没实现,没时间,定制xdoclet好难!!
-------------------------
--我也SpringMVC的忠实爱好着o
customize-xdoclet.rar
 描述:
我暴汗,今天修正了一个大大的错误

下载
 文件名:  customize-xdoclet.rar
 文件大小:  67.9 KB
 下载过的:  文件被下载或查看 78 次



上一次由大愚弱智于2005-5-24 周二, 下午4:42修改,总共修改了1次
返回顶端
阅读会员资料 发送站内短信
spring嘟嘟
BEA Weblogic
BEA Weblogic


性别:性别:男
年龄:48
十二宫图:天平宫
加入时间: 2004/04/10
文章: 256
来自:
离线

文章 时间: 2005-4-28 12:24:43    标题: 引用回复 将这个帖子加入我的Blog

生成验证的Xdoclet本来就有

运行时怎么会动态更改验证?

我在http://cosoft.org.cn/projects/jsvalidation找到一个js验证framework,这是一个很漂亮的验证framework(只是国产的而已,经理不是很喜欢),不用重新启动服务器,很好用!

这个有什么用,别人关闭JS验证的时候,就不能自动使用后台验证了
返回顶端
阅读会员资料 发送站内短信 发送电子邮件 浏览发表者的主页
xiaoyu
Weblogic Cluster
Weblogic Cluster


性别:性别:男
年龄:23
十二宫图:白羊宫
加入时间: 2003/10/01
文章: 498
来自: 广东
离线

文章 时间: 2005-4-28 12:59:41    标题: 引用回复 将这个帖子加入我的Blog

大愚弱智 写道:
xiaoyu 写道:
再讲一个spring mvc的问题。

如果一个表单需要多个PO(VO),怎么办?难道除了只写一个包函的VO就没有其它的方法了吗?




多个PO?formBackingObject只能返回一个PO(VO),如果要返回多个东东,使用 referenceData返回的是一个Map,在Map里面你爱装傻就装啥。例如一个Map里面装上一个List或Map,然后这个List或Map再装其它的东西,你的需求是不是这样子的呢?


不是,我要的是页面-->controller(提交多个PO或VO),不是controller-->页面
返回顶端
阅读会员资料 发送站内短信 发送电子邮件
大愚弱智
Sybase EAServer
Sybase EAServer


性别:性别:男
年龄:24
十二宫图:白羊宫
加入时间: 2004/08/21
文章: 77
来自: 北京
离线

文章 时间: 2005-4-28 14:09:03    标题: 引用回复 将这个帖子加入我的Blog

[quote="spring嘟嘟"]生成验证的Xdoclet本来就有
运行时怎么会动态更改验证?
[/quote]

spring生成验证xdoclet的是有的,我用过一阵子,觉得不好用。

不是运行时的更改,而是我们测试的时候频繁的更改配置文件。


后台验证有后台验证的好长,但使用js验证也自然有其好处:那就是可以在客户端验证,不必提交到服务器。
返回顶端
阅读会员资料 发送站内短信
xiaoyu
Weblogic Cluster
Weblogic Cluster


性别:性别:男
年龄:23
十二宫图:白羊宫
加入时间: 2003/10/01
文章: 498
来自: 广东
离线

文章 时间: 2005-4-30 09:29:22    标题: 引用回复 将这个帖子加入我的Blog

大愚弱智:
引用:
另外,Spring的可配置客户端验证问题,spring借用struts的验证机制,我用过一阵子,每更改一下配置文件,就得重新启动服务器,感觉不是很好用


server端的验证为什么要重启?我想不明白.

spring的验证是可以直接new一个验证类,然后做测试的.有必要用容器吗?

js,是有必要,但如果单单靠js就是找死.
返回顶端
阅读会员资料 发送站内短信 发送电子邮件
大愚弱智
Sybase EAServer
Sybase EAServer


性别:性别:男
年龄:24
十二宫图:白羊宫
加入时间: 2004/08/21
文章: 77
来自: 北京
离线

文章 时间: 2005-4-30 10:56:34    标题: 引用回复 将这个帖子加入我的Blog

checkbox绑定到boolean的问题我还没解决,CustomBooleanEditor它只能绑定到Boolean,而不是boolean,只能使用request.getParameter来取得checkbox的值。

----这个问题谁能帮我解决一下
返回顶端
阅读会员资料 发送站内短信
大愚弱智
Sybase EAServer
Sybase EAServer


性别:性别:男
年龄:24
十二宫图:白羊宫
加入时间: 2004/08/21
文章: 77
来自: 北京
离线

文章 时间: 2005-4-30 13:32:24    标题: 引用回复 将这个帖子加入我的Blog

所有的问题都已经解决了!只是你们敢不敢使用新的“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
Weblogic Cluster


性别:性别:男
年龄:23
十二宫图:白羊宫
加入时间: 2003/10/01
文章: 498
来自: 广东
离线



上一次由xiaoyu于2005-5-03 周二, 下午1:33修改,总共修改了2次
文章 时间: 2005-4-30 16:56:55    标题: 引用回复 将这个帖子加入我的Blog

贴上一个解决boolean值的类,还没有测试过(不好意思),是按照spring里的写的,有少少改动(以下的代码是错误的,sorry).

java代码: 


package org.springframework.beans.propertyeditors.custom;

import java.beans.PropertyEditorSupport;

import org.springframework.util.StringUtils;

/**
* 自定义的boolean类型编辑器
* @author xiaoyu 
*/

publicclass CustomBasicBooleanEditor extendsPropertyEditorSupport{

        publicstaticfinalString VALUE_TRUE = "true";

        publicstaticfinalString VALUE_FALSE = "false";

        privatefinalboolean allowEmpty;


        public CustomBasicBooleanEditor(boolean allowEmpty){
                this.allowEmpty = allowEmpty;
        }

        publicvoid setAsText(String text)throwsIllegalArgumentException{
                if(this.allowEmpty && !StringUtils.hasText(text)){
                       //修改,如果为空值,那就是false
                        setValue(false);
                }
                elseif(text.equalsIgnoreCase(VALUE_TRUE)){
                        //这句改动了
                        setValue(true);
                }
                elseif(text.equalsIgnoreCase(VALUE_FALSE)){
                        //这句改动了
                        setValue(false);
                }
                else
                        throw newIllegalArgumentException("Invalidboolean value [" + text + "]");
        }

        publicString getAsText(){
                return(getValue() == null ? "" : getValue().toString());
        }

}

返回顶端
阅读会员资料 发送站内短信 发送电子邮件
大愚弱智
Sybase EAServer
Sybase EAServer


性别:性别:男
年龄:24
十二宫图:白羊宫
加入时间: 2004/08/21
文章: 77
来自: 北京
离线

文章 时间: 2005-4-30 20:24:31    标题: 引用回复 将这个帖子加入我的Blog

我正在研究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 阅读(3815) 评论(0)  编辑  收藏 所属分类: Spring

只有注册用户登录后才能发表评论。


网站导航:
 

<2006年9月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(1)

随笔分类

随笔档案

IT风云人物

文档

朋友

相册

经典网站

搜索

  •  

最新评论

阅读排行榜

评论排行榜