自己当时把formbean设置成
DynaValidatorActionForm了,改正成为DynaValidatorForm即可。
下面是当时网上看到的两篇文章,觉得有意义:
(一)
搞了几天Validator框架验证,怎么做它都不起作用,我找了N个资料,都没查出来问题所在。终于,发现了问题,我把LoginForm.java(例子),就是表单Bean中的默认验证方法validate()删掉后就起作用了,至今没发现有一个资料说要删掉它,(可能需要在某个文件里设置一下)都是说它会被验证框架的validate()方法覆盖掉,只要在<action></action>属性中设置 validate="true",反正我的是没被覆盖掉,它一直在起作用,所以我的validation.xml不起作用。当然在创建FormBean时可以不选择创建validate()方法,也就没那么多事了。如果创建了,不想删掉的话,就改个名字可以改成validator(),改成其他的名字我没试过。目的就是屏蔽掉它。
如果想在客户端验证,就要这样写 <html:form action="/login" οnsubmit="return validateLoginForm(this)"> validate+表单名(), 表单名第一个字母要大写,还要在上写 <html:javascript formname="loginForm"> </html:javascript> ,就行了。它会产生javascript代码,可以看一下页面的源代码。至于让validate()方法和validation.xml同时起作用,
如果想在客户端验证,就要这样写 <html:form action="/login" οnsubmit="return validateLoginForm(this)"> validate+表单名(), 表单名第一个字母要大写,还要在上写 <html:javascript formname="loginForm"> </html:javascript> ,就行了。它会产生javascript代码,可以看一下页面的源代码。至于让validate()方法和validation.xml同时起作用,
那么在Form Beans中重载了validate方法的话,就会覆盖原有ValidatorForm中对应的功能,所以如果想
一起用的话,需要在Form Beans的validate方法中调用errors = super.validate(mapping, request);
这句代码是启用Validate框架所要做的工作,然后可以判断errors再作下一步的处理。
</html:form>
(二)
要启动客户端验证,必须将HTML标记库的javascript标记放入在jsp页面文件中,例如:
<html:javascript formName="selectForm"/>.
而且要在form标签中这样写<html:form action = "/selectAction.do"method = "post" focus="userId" οnsubmit="return validateSelectForm(this);">
注意DynaValidatorForm(ValidatorForm)和DynaValidatorActionForm(ValidatorActionForm)的区别。前者主要的视角是formbean,而后者的视角是action。
当formbean被不同的action使用时,对于不同的action而言,使用的formbean的属性集合有大有小。此时如果仍然以formbean为主体,会造成其他action的不正常使用。因此,struts中提出了DynaValidatorActionForm(ValidatorActionForm)。此时在validation.xml中的form标签的name属性改为action的path属性,又由于action中有attribute和name属性,validation框架就可根据这个action得到对应的formbean。
同时注意页面文件的相应控件也要改为action的path属性。例:<html:javascript formName="/selectAction"/>
<html:javascript formName="selectForm"/>.
而且要在form标签中这样写<html:form action = "/selectAction.do"method = "post" focus="userId" οnsubmit="return validateSelectForm(this);">
注意DynaValidatorForm(ValidatorForm)和DynaValidatorActionForm(ValidatorActionForm)的区别。前者主要的视角是formbean,而后者的视角是action。
当formbean被不同的action使用时,对于不同的action而言,使用的formbean的属性集合有大有小。此时如果仍然以formbean为主体,会造成其他action的不正常使用。因此,struts中提出了DynaValidatorActionForm(ValidatorActionForm)。此时在validation.xml中的form标签的name属性改为action的path属性,又由于action中有attribute和name属性,validation框架就可根据这个action得到对应的formbean。
同时注意页面文件的相应控件也要改为action的path属性。例:<html:javascript formName="/selectAction"/>