一、ActionForm和ValidatorForm区别:
一个Form继承了ValidatorForm 就不用写具体的验证,但是需要提供:validation-rules.xml 和 validation.xml配置,ValidatorForm会调用validate() 方法进行验证,而验证规则是在以上两个文件定义。
说明:
1.相同点:ActionForm和ValidatorForm都不是动态的Form,所以一定是一个form对应一个FormBean类;
2.不同点:如果是继承了ValidatorForm的话,就不必在FormBean中加入validate()方法(应该说是不必覆盖其方法,而实际上仍是调用了validate()方法进行验证,而验证规则是在validation-rules.xml和validation.xml两个文件中有定义)。
3.如果在ValidatorForm中重写了validate方法,则程序不会从validation-rules.xml和validation.xml两个文件中进行验证.而是执行重写了的validate方法里面的内容。如果不重写此方法,则仍然会执行此方法,而此方法中默认会从上述两个文件中进行验证。
所以,我们多数从继承了ValidatorForm的类中看到没有validate方法,取而代之是修改成的validator方法,目的是去除掉一个重写的validate()方法,而且validator()方法也不会被使用,巧妙的屏蔽了通过validate方法来验证的功能。
补充:
服务器验证和客户端验证(通过JavaScript)的区别:
1.客户端验证,由于暴露代码,会降低安全性,服务器验证相对安全;
2.客户端验证减缓服务器负担;
3.在按确定提交表单的时候,是先进行验证,如果验证成功,则继续使用validate方法进行验证。如果验证不成功,则中止验证过程,不会使用validate方法。
二、ActionForm和DynaActionForm区别
1.DynaActionForm是动态的,由ActionForm继承而来,之所以有这个东西是因为:它特点是不需要FormBean,而是在struts-config.xml中通过form-property来设置form的表单字段属性。优势是减少在大型开发过程中formbean的增加而显得程序臃肿,给维护和升级带来极大的不便。
2.需要注意的是:在JSP或Action中访问动态ActionForm时与标准的ActionFrom有所不同,标准ActionForm为每个属性均提供了一对getXXX()/setXXX()方法,通过调用getxxx()/setxxx()方法即可读取或设置ActionForm某个属性.而DynaActionForm则把所有的属性保存在一个Map类对象中,只能通过get()和put()来存取其属性值。如果从动态表单实例中读取会员的注册信息:
- String username=form.get(“username”).toString();
- String password=form.get(“password’).toString();
- String phone=form.get(”phone”).toString();
- String email=form.get(”email”).toString();
- String address=form.get(”address”).toString();
String username=form.get("username").toString();
String password=form.get("password').toString();
String phone=form.get("phone").toString();
String email=form.get("email").toString();
String address=form.get("address").toString();