本人对J2EE的轻量级框架是持强烈推荐的态度,自从前些年做EJB2.0,后来变迁到简易版EJB3.0,最后回到轻量级框架技术上,感觉开源的东西未必不是好东西。Spring就是现在本人最喜欢的框架之一,很多新的特性、模块和各种接口都在不断地更新和推出,令人期待。
大多数人都在争论着WEB框架和Persistence框架的选择,到底是struts还是Webwork,到底是hibernate还是ib
atis,但Spring几乎你可以毫不犹豫就决定使用它,它是一个很棒的管理者和协调者,就因为它漂亮的注入机制和各种超强的扩展能力。
似乎文章到此本人都是在赞扬此物。决非如此,那些仅是其优势,拿优势去碰别人劣势,你当然可以笑得很得意。回到topic,Spring MVC并不是什么新东西了。更简易 分层让开发者更关注business method。
个人认为,尝试了Spring MVC的dataBinding和validator机制,感觉是一个不错的想法。似乎是,页面的生成是先data binding完成后,待到用户submit时方去做验证检测的。开始可能会让人觉得,在Controller类的initBinding方法里已经将用户的输入和对应的类所联系在一起,这一步是在页面生成时完成的,但用户的输入不符合期望的类时,却在用户提交时才捕获错误。这有点时空混乱。(其实Spring是一直在binding后validate)。
作为开发者,本人也如此,可能会选择在提交时才去判断用户输入是否和类联系且符合期望,这样页面的生成是完全不必考虑input属性和你的model有丝毫关系。这是不选择框架直接使用JSP进行开发的原始坎材夫的做法(当年本人就是这样竟然揉出了一个臃肿的系统)。
其实,细心点你会发现,initBing里你是registerCustomEditor,是注册,而不是验证,通俗的话理解就是,先注册一个格式,这是告诉server的,而不是用户,server认同了,就定下了这个临时的标准,用户不按标准来server就抛出一个异常。
问题来了,最要命的就是不能给用户看到异常exception。翻看Spring的源代码找到CustomDateEditor,你就可以模仿地做一个自定义输入的标准editor类。当用户输入的格式不符合我期望的类时本人就很乖地按照源代码那样抛出了IllegalArgumentException。就这样,页面的输入框里输入错误的格式数据,页面不会出现505错误页面,很幸运,但是又很不幸,你的errors捕来的defaultMessage是Failed to convert [String] to [XXX.XXX.YourType]。用户直接可以看到java的异常错误。当时我还苦苦追寻这个问题的答案,在各大bbs上求助,no response。最好的办法就是细心地debug。意外地你会在一个对BindException的process方法发现它使用了validtor。
Okay,到了这一步,我们就很清楚Spring要做什么了。它会寻找一个errorCode,这个errorCode预期是出现在你的*.properties文件中的。没有这个errorCode怎么办,只好defaultMessage is the IllegalArgumentException's message。所以用户会看到java的异常错误信息,很不友好,还泄密。这个errorCode就是typeMismatch。只要在你的properties文件里注有typeMismatch的友好提示错误信息即可,如“typeMismatch.XXX.XXX.myClass=Error”。
Spring的validator和其它框架的差不多,构思基本上是一样的,但是它在spring里的用法是很灵活的。且推出的超炫的Valang,是个很漂亮的部分代替硬编码的极佳选择。可惜中文的valang教程尚少。推荐各位学习Expert.Spring.MVC.and.Web.Flow.Feb书里的validator部分,很详细。本人一直用的是07年的Spring-modules,现在有点落后了,刚下好08年3月份的release,现在开始研究一下新特性。新的感想再post和大家share一番。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9929735/viewspace-218003/
,如需转载,请注明出处,否则将追究法律责任。