浏览 4327 次
锁定老帖子 主题:谁能解释一下这个validator呢
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-04-28
classname="org.apache.struts.validator.FieldChecks" method="validateRequired" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionErrors, javax.servlet.http.HttpServletRequest" msg="errors.required"> <javascript><![CDATA[ function validateRequired(form) { var isValid = true; var focusField = null; var i = 0; var fields = new Array(); oRequired = new required(); for (x in oRequired) { var field = form[oRequired[x][0]]; if (field.type == 'text' || field.type == 'textarea' || field.type == 'file' || field.type == 'select-one' || field.type == 'radio' || field.type == 'password' || field.type == 'hidden') { var value = ''; // get field's value if (field.type == "select-one") { var si = field.selectedIndex; if (si >= 0) { value = field.options[si].value; } } else { value = field.value; } if (trim(value).length == 0) { if (i == 0) { focusField = field; } fields[i++] = oRequired[x][1]; isValid = false; } } } if (fields.length > 0) { if(focusField.type!='hidden'){ focusField.focus(); } alert(fields.join('\n')); } return isValid; } // Trim whitespace from left and right sides of s. function trim(s) { return s.replace( /^\s*/, "" ).replace( /\s*$/, "" ); } ]]> </javascript> </validator> oRequired = new required();是什么意思? oRequired[x][0]]指什么? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-04-28
首先,要告诉你的是你贴的这段js是有bug的。
赶紧升级吧 oRequired = new required();这行是错的,当时让我郁闷了5个小时。 正确的这行是这样的: oRequired = eval('new ' + retrieveFormName(form) + '_required()'); 当然相关的脚本全部更新一下。 再来回答你想知道oRequired[x][0]]指的东西。 oRequired[x][0]]得到的是表单域中的name, 比如你有个表单域的名字是username,而你限制了username是必填的,那么,在这里取得的就是“username” 而对应的 oRequired[x][1],就是出错消息,比如“用户名 为必填项。” |
|
返回顶楼 | |
发表时间:2006-04-28
我现在有个问题就是我有一组username验证。要我该怎么修改这个代码。
|
|
返回顶楼 | |
发表时间:2006-04-28
解决方法:
使用struts1.2.8版本和commons validator 1.2.0版本结合。 用struts-1.2.8-bin.zip\struts-1.2.8-bin\lib\validator-rules.xml替换 你的validator-rules.xml 编辑你的\validation.xml,修改后内容如下: (dtd使用1.2.0版本的) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.2.0//EN" "http://jakarta.apache.org/commons/dtds/validator_1_2_0.dtd"> <form-validation> </form-validation> |
|
返回顶楼 | |
发表时间:2006-04-28
还要使用commons-validator-1.2.0.zip\commons-validator-1.2.0\commons-validator-1.2.0.jar
|
|
返回顶楼 | |
发表时间:2006-04-28
rickhunter 写道 <validator name="required"
classname="org.apache.struts.validator.FieldChecks" method="validateRequired" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionErrors, javax.servlet.http.HttpServletRequest" msg="errors.required"> <javascript><![CDATA[ function validateRequired(form) { var isValid = true; var focusField = null; var i = 0; var fields = new Array(); oRequired = new required(); for (x in oRequired) { var field = form[oRequired[x][0]]; if (field.type == 'text' || field.type == 'textarea' || field.type == 'file' || field.type == 'select-one' || field.type == 'radio' || field.type == 'password' || field.type == 'hidden') { var value = ''; // get field's value if (field.type == "select-one") { var si = field.selectedIndex; if (si >= 0) { value = field.options[si].value; } } else { value = field.value; } if (trim(value).length == 0) { if (i == 0) { focusField = field; } fields[i++] = oRequired[x][1]; isValid = false; } } } if (fields.length > 0) { if(focusField.type!='hidden'){ focusField.focus(); } alert(fields.join('\n')); } return isValid; } // Trim whitespace from left and right sides of s. function trim(s) { return s.replace( /^\s*/, "" ).replace( /\s*$/, "" ); } ]]> </javascript> </validator> oRequired = new required();是什么意思? oRequired[x][0]]指什么? 这个要结合你另一个xml 比如 <form-validation> <formset> <form name="logonForm"> <field property="username" depends="required"> <msg name="required" key="error.username"/> </field> </form> </formset> </form-validation> 首先你的页面上肯定有 html:javascrip .这个tag会根据你的配置生成一个 function required{ } 这个就是你代码中被 new required(javascript中一个function也可以被new 作为一个类)的地方. 随后你会看到这个function中会针对每个field生成一个记录作为required的一个属性. 用for in的时候就可以循环找到对应的field 这个记录是个数组,第一个是field的名称.所以 form[oRequired[x][0]]就是找到form中的对象.后面是你在xml中的其他配置,比如提示信息什么的. 说白了required里存放了被验证field的相关配置. 至于楼上朋友所说的版本新旧,那是因为对于一个form,就会在页面上生成一个required.如果两个form生成的都叫required名字就冲突了,所以现在struts在生成之前用每个form名字作为前缀 这种方法挺有意思,把需要验证的对象和验证规则分离出来,其中验证对象动态生成,验证规则是写死的 高ren之作,非你我等可窥斑啊!! |
|
返回顶楼 | |
发表时间:2006-04-28
rickhunter 写道 我现在有个问题就是我有一组username验证。要我该怎么修改这个代码。
这种复杂需求我看还是算了吧 自己动手写script也比改他的代码强. |
|
返回顶楼 | |
发表时间:2006-04-28
再次 询问 大家
if (i == 0) { focusField = field; } fields[i++] = oRequired[x][1]; 是个什么意思? 特别是if (i == 0) { |
|
返回顶楼 | |