Struts的运行机制及validator框架问题,

skying1 2006-06-24 07:00:09
初学Struts!
最近一直被一些基于Struts的验证问题困绕,
一直没有找到好的解决方案,希望CSDN的高手
指点迷津,对于验证开始我使用的是Validator框架
来验证,不要自己写验证类,后来发现验证不通过,页面
直接跳转到input页面,由于开始没设计好ACTION和FORM
的对应关系,一个action里面,有很多个页面跳转,且有多个
页面是需要验证数据的。所以Validator框架不好使用,有
朋友说修改validator 原代码,能力有限.

后来就想将验证写到action里面,感觉只有业务逻辑的验证
才可以,例:如果验证数据,是不是数字类型就有问题了,当你写验证
逻辑的时候,你可以比较每个字符的ASCII是不是都在0-9这个范围
但是,当执行到你的验证逻辑之前,FormBean的数据已经被填充了,
如果要求输入数字类型的数据,你输入字母,虽然不合法,但是
FORMBAEN会自动给你填上合法值,比如是int型的,它会自动填上0
所以你无法验证。

基于以上问题,让我想知道Struts的运行机制到底是怎样的,但现在
感觉是很多地方无法理解了,我说说我理解的思路,不知道对不对,还有
很多不知道的,请高手帮忙解释下。


WEB服务器启动--》读取配置(web.xml),加载组件,监听端口--》用户发出请求(.do)

--》调用actionservlet实例--》读取struts-config.xml--》执行RequestProcessor

--》填充FormBean,验证FormBean--》调用Action,跳转JSP页面--》执行Jsp解释出来的Servlet

--》返回(response)--》返回给用户

我的理解大概是这样,还有就是标签库,不知道它什么时候执行了。
按道理应该在 填充FormBean与 执行Jsp解释出来的Servlet 执行
这样才能将FormBean里面的数据填充到页面,也才可以从页面得到数据。

问题又来了,大家都知道FormBean里面的set,get方法,是用来操作属性的,
填充数据就靠这两个方法,那肯定要实例这个类,调用这些方法。
类名及方法名都是写程序人员自己定义的,框架无法知道,那么它肯定要
通过读取配置文件struts-config.xml来得到,大家都知道这个配置文件
只是写了action,form 的class名字,方法名无法得到,标签库里面的property
属性提供了对象的具体方法名,也就是说在执行标签库实例的时候。调用了方法
,也就是说,上面的流程中,“填充FormBean,验证FormBean” 的时候有执行标签库。

那它是怎么生成标签的实例对象,怎样得到FormBean对象及调用其方法的。

这个地方具体是怎么操作的,请哪位用朴实点的语言说一下。

告诉源代码的位置也行,自己也看了看源代码,但是里面的方法调来调去,且
不知道方法的具体用途,英文太差。
要是能拿个流程图,且有方法具体作用的中文版就好了。(重分购买:),E-Mail:4811killer@163.com)

...全文
283 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saro 2006-06-25
  • 打赏
  • 举报
回复
对于一个action有多个input页面的情况是没办法用validator框架的服务端验证的,需要自己写,客户端验证可以,也很方便。

<<--》填充FormBean,验证FormBean--》
这个过程很简单,根据配置中action对应的form类名,实例化一个对象,然后从request中拿数据并验证。

<<问题又来了,大家都知道FormBean里面的set,get方法,是用来操作属性的.....
不是,框架都是通过反射来查找formbean所有的property的,知道类名就行了,struts是用的BeanUtils库。
rickhunterchen 2006-06-25
  • 打赏
  • 举报
回复
如果你需要多个数据验证,可以自己写,然后不通过就跳到不同的页面。这并不需要validator来给你验证。

validator只是作到前台验证,跟数据库的打交道还是需要自己在action中写判断来验证。
skying1 2006-06-24
  • 打赏
  • 举报
回复
关于Validator框架,我主要是不知道如何有效的控制,验证未通过的情况下,返回页面的问题.
默认情况validator 返回的页面都是mapping.getinputForward().怎样能 改变这个返回页面.

大家怎么都没回帖,是不是今天休息了.
rickhunterchen 2006-06-24
  • 打赏
  • 举报
回复
validator跟action没关系,但与formbean有关系,原则上是一个formbean有一套验证规则。

如果你的两个页面调用同一个formbean,但又想有两套验证规则,这是无法实现的。除非你写两个formbean,每个formbean对应一套验证规则。
rickhunterchen 2006-06-24
  • 打赏
  • 举报
回复
validator框架是对页面验证,有两种形式,js和页面上显示错误。
我们一般只是使用validator的js验证,如果数据有误或为空时会弹出提示。这样显得比较人性化。
这个怎么用,到网上搜索一下就知道了。

在页面上显示错误是validator在你的formbean中对其属性进行验证,有错误就会在页面的html:error的地方显示出来。

这两种形式各有优点。

validator很好用,而且自己也可以修改,当然这需要一定水平。用好validator能让你少些很多重复的代码。

67,542

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧