关于validate验证表单与js语法的一个bug

来源:互联网 发布:百电通打电话要网络 编辑:程序博客网 时间:2024/04/29 16:33

之前写的代码没有问题,进入到validateXXX()后,没有问题就会进入XXX()方法,后来由于前端界面进行了修改,验证总是失败,但是前端没有提示任何信息

<s:fielderrr>标签没有任何提示。这使我很困惑,偶然看到一篇文章,他说,validate方法体执行前,会对表单提交的数据与action的字段进行类型转换,string变int,或者date类型,之类的,如果错误会加入到fielderr中,然后执行完validate后,会跳转到input所标识的界面,但是 不一定前段你恰好定义了与该错误属性的fielderror标签,所以自然没有征兆,让人很困惑,所以建议大家在调试时候,在validate快执行完,通过this.getFielderrors()   获取错误信息 ,z这样就可以监控错误了,不至于迷惑。另外我的原因在于  之前的一个属性int类型,parent_id. 是一个隐藏域,所以我通过js为其赋值

方法如下

function add(parent_category,parent_id) {
var addform = document.getElementById("AddForm");

var parent = addform.parent_category;
parent.value = parent_category;


var parent_id = addform.parent_id;
parent_id.value =parent_id;

}

我理所当然的认为蓝色的parent_id会是方法的参数,而不是空间类型,但是通过Myeclipse,我点击一下parent_id,蓝色的parent_id与两个红色的显示是一个颜色,说明他们是一个变量,晕,这是value自然是object类型,无法转化为int,所以validate悄无声息的报错,而没有任何线索,建议大家js命名一定要注意,因为它是弱类型 语言,不同类型赋值,不会有编译错误提示,也就无法优雅地发现错误。利剑双刃

感谢给我提供线索的哥们,以下是他给的提示


首先看看类型转换与输入校验的流程:

1. 首先Struts2对客户端传来的数据进行类型转换
2. 类型转换完毕后再进行输入校验
3. 如果类型转换和输入校验都没有错误发生,那么进入execute方法(调用商业逻辑)
注意:如果类型转换不成功,也同样要进行输入校验,此时会给这些字段一个默认值。
遇到类型转换错误的时候(也就是说不能进行类型转换),struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面
而这错误是struts自动生成的,对用户来说并不友好 ,特别是在中文环境下。 
0 0
原创粉丝点击