javascript级的validaotr



这个东西,不知道大家有没有兴趣,大概用了10天,把快速原型搭建出来了。我想,即使以后领导不用,也都可以用这个思路,把struts或者其他的validator扩展到真正的web级别上

下面是一个示范,省略了通用的javascript控制部分,省略了java级别检查,这些都已经做到了

validator定义:
<?xml version="1.0" encoding="GBK"?>
<!-- 当该文件生效时,所有的表单设置,与本xml冲突的均会被修改为一致 -->
<!-- needjs默认true -->
<form name=
"action1" action="test1_submit.jsp" needjs="true">
<!-- color在未来再做可配置,快速原型放弃 -->
<LostFocusColor/>
<GetFocusColor/>
<!-- global规则定义,对任意多个global来说,constant的name都应该是唯一的 -->
<global>validator
//global1.xml</global>
<!-- required默认false,spacetrim默认true -->
<field name=
"username" info="xxx" required="true" spacetrim="true">
<message>
用户名不允许为空,且必须为字母和数字组成。
</message>
<validator>
^[A-Za-z0-9]+$
</validator>
</field>
<field name=
"password" required="true" spacetrim="true">
<message>
密码最少3位,最长8位,必须全数字。
</message>
<validator-constant>
num38
</validator-constant>
<!-- 表示强制约束关系,equal表示必须相等,默认为false,当equal为true,则validator节点无效 -->
<!-- 支持多个otherfield节点 -->
<otherfield name=
"password1" equal="true">
<!-- 当无validator-condition表示任意的条件都可以 -->
<!-- 现在只支持一个validator节点 -->
<validator validator-condition=
"^[A-Za-z0-9]+$">
^[A-Za-z0-9]+$
</validator>
</otherfield>
</field>
<field name=
"password1">
<message>
重复密码最少3位,最长8位,必须全数字,必须与密码一致。
</message>
<validator-constant>
num38
</validator-constant>
</field>
<field name=
"btnSubmit">
</field>
</form>

生成的javascript代码:
<!-- validator自动机开始 -->
<SCRIPT Language=
"JavaScript" src="/validator/validator.js"></SCRIPT>
<script>
var validator_formname='newadslwithtel';
if(document.newadslwithtel==null){validator_log('error:未能找到validator申明的form name');}
document.newadslwithtel.action='testnewadslwithtel_submit.jsp';
validator_autoinit('newadslwithtel');
var validator_re;
//正则对象
var validator_es=document.newadslwithtel.elements;
//整个form中field的数组
function validator_bChkField(elem){
var validator_value=validator_getvalue(elem);
if(elem.name=='ZRMC'){
//trim操作,只对text和password做
if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){
elem.value=validator_trim(elem.value);
validator_value=elem.value;
}
//空值判断
if(null==validator_value || ''==validator_value){
validator_log('error:用户名称不允许为空,长度最大为10。');
return false;
}
//正则,当是checkbox的时候,用validator_value代替
validator_re=new RegExp(
"^[^\f\n\r\t\v]{0,10}$");
if(!validator_re.test(validator_value)){
validator_log('error:用户名称不允许为空,长度最大为10。');
return false;
}
}
var validator_value=validator_getvalue(elem);
if(elem.name=='ZRLX'){
//trim操作,只对text和password做
if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){
elem.value=validator_trim(elem.value);
validator_value=elem.value;
}
//空值判断
if(null==validator_value || ''==validator_value){
validator_log('error:用户类型必选一个。');
return false;
}
}
var validator_value=validator_getvalue(elem);
if(elem.name=='ZRLR'){
//trim操作,只对text和password做
if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){
elem.value=validator_trim(elem.value);
validator_value=elem.value;
}
//空值判断
if(null==validator_value || ''==validator_value){
validator_log('error:联系人不允许为空,长度最大为10。');
return false;
}
//正则,当是checkbox的时候,用validator_value代替
validator_re=new RegExp(
"^[^\f\n\r\t\v]{0,10}$");
if(!validator_re.test(validator_value)){
validator_log('error:联系人不允许为空,长度最大为10。');
return false;
}
}
var validator_value=validator_getvalue(elem);
if(elem.name=='ZRDH'){
//trim操作,只对text和password做
if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){
elem.value=validator_trim(elem.value);
validator_value=elem.value;
}
//空值判断
if(null==validator_value || ''==validator_value){
validator_log('error:联系电话不允许为空,长度最大为20。');
return false;
}
//正则,当是checkbox的时候,用validator_value代替
validator_re=new RegExp(
"^[^\f\n\r\t\v]{0,20}$");
if(!validator_re.test(validator_value)){
validator_log('error:联系电话不允许为空,长度最大为20。');
return false;
}
}
var validator_value=validator_getvalue(elem);
if(elem.name=='ZRMM'){
//trim操作,只对text和password做
if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){
elem.value=validator_trim(elem.value);
validator_value=elem.value;
}
//空值判断
if(null==validator_value || ''==validator_value){
validator_log('error:电话服务密码不允许为空,必须全数字,必须6位。');
return false;
}
//global
if(!validator_constant_telpassword_check(validator_value)){
validator_log('error:电话服务密码不允许为空,必须全数字,必须6位。');
return false;
}
}
var validator_value=validator_getvalue(elem);
if(elem.name=='ZRMM1'){
//trim操作,只对text和password做
if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){
elem.value=validator_trim(elem.value);
validator_value=elem.value;
}
//空值判断
if(null==validator_value || ''==validator_value){
validator_log('error:电话服务密码不允许为空,必须全数字,必须6位,必须两次输入的密码一致。');
return false;
}
//global
if(!validator_constant_telpassword_check(validator_value)){
validator_log('error:电话服务密码不允许为空,必须全数字,必须6位,必须两次输入的密码一致。');
return false;
}
//other equal
if(validator_value!=validator_getvalue(validator_es('ZRMM'))){
validator_log('error:电话服务密码不允许为空,必须全数字,必须6位,必须两次输入的密码一致。');
return false;
}
}
var validator_value=validator_getvalue(elem);
if(elem.name=='Tel_TX_1'){
}
var validator_value=validator_getvalue(elem);
if(elem.name=='Tel_TX_15'){
}
var validator_value=validator_getvalue(elem);
if(elem.name=='Tel_TX_TXC1_15'){
//other 正则
var validator_otherfield_condition=false;
validator_re=new RegExp(
"-1");
validator_otherfield_condition=validator_re.test(validator_getvalue(validator_es('Tel_TX_15')));
if(validator_otherfield_condition){
validator_re=new RegExp(
"-1");
if(!validator_re.test(validator_value)){
validator_log('error:缩位拨号位数,当选择了缩位拨号必选,否则必须选择为-无缩位拨号。');
return false;
}
}
//other 正则
var validator_otherfield_condition=false;
validator_re=new RegExp(
"0");
validator_otherfield_condition=validator_re.test(validator_getvalue(validator_es('Tel_TX_15')));
if(validator_otherfield_condition){
validator_re=new RegExp(
"^[123]+$");
if(!validator_re.test(validator_value)){
validator_log('error:缩位拨号位数,当选择了缩位拨号必选,否则必须选择为-无缩位拨号。');
return false;
}
}
}
var validator_value=validator_getvalue(elem);
if(elem.name=='Tel_TX_22'){
}
var validator_value=validator_getvalue(elem);
if(elem.name=='Tel_TX_12'){
}
var validator_value=validator_getvalue(elem);
if(elem.name=='Tel_TX_20'){
}
var validator_value=validator_getvalue(elem);
if(elem.name=='Tel_TX_TXC1_116'){
//trim操作,只对text和password做
if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){
elem.value=validator_trim(elem.value);
validator_value=elem.value;
}
}
var validator_value=validator_getvalue(elem);
if(elem.name=='Tel_TX_TXC1_116_1'){
//trim操作,只对text和password做
if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){
elem.value=validator_trim(elem.value);
validator_value=elem.value;
}
//other equal
if(validator_value!=validator_getvalue(validator_es('Tel_TX_TXC1_116'))){
validator_log('error:呼出加锁密码在选择了长途或市内呼出加锁时必须填4位数字且两次输入一致,否则必须不填。');
return false;
}
}
var validator_value=validator_getvalue(elem);
if(elem.name=='Tel_ZHZH'){
//trim操作,只对text和password做
if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){
elem.value=validator_trim(elem.value);
validator_value=elem.value;
}
//空值判断
if(null==validator_value || ''==validator_value){
validator_log('error:银行帐号必填,必须全数字,长度小于20位。');
return false;
}
//正则,当是checkbox的时候,用validator_value代替
validator_re=new RegExp(
"^[0-9]{0,20}$");
if(!validator_re.test(validator_value)){
validator_log('error:银行帐号必填,必须全数字,长度小于20位。');
return false;
}
}
var validator_value=validator_getvalue(elem);
if(elem.name=='Tel_ZHZH1'){
//trim操作,只对text和password做
if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){
elem.value=validator_trim(elem.value);
validator_value=elem.value;
}
//空值判断
if(null==validator_value || ''==validator_value){
validator_log('error:银行帐号必填,必须全数字,长度小于20位,且两次输入必须一致。');
return false;
}
//正则,当是checkbox的时候,用validator_value代替
validator_re=new RegExp(
"^[0-9]{0,20}$");
if(!validator_re.test(validator_value)){
validator_log('error:银行帐号必填,必须全数字,长度小于20位,且两次输入必须一致。');
return false;
}
//other equal
if(validator_value!=validator_getvalue(validator_es('Tel_ZHZH'))){
validator_log('error:银行帐号必填,必须全数字,长度小于20位,且两次输入必须一致。');
return false;
}
}
var validator_value=validator_getvalue(elem);
if(elem.name=='ADSL_ZRDL'){
//trim操作,只对text和password做
if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){
elem.value=validator_trim(elem.value);
validator_value=elem.value;
}
//空值判断
if(null==validator_value || ''==validator_value){
validator_log('error:ADSL业务登录名必须8位内的小写字母或数字,同时必须sz开头,必须与已有的登录名不重复。');
return false;
}
//正则,当是checkbox的时候,用validator_value代替
validator_re=new RegExp(
"sz[0-9a-z]{0,6}$");
if(!validator_re.test(validator_value)){
validator_log('error:ADSL业务登录名必须8位内的小写字母或数字,同时必须sz开头,必须与已有的登录名不重复。');
return false;
}
}
return true;
}
function validator_submit(formname){
var validator_value=validator_getvalue(validator_es('ZRMC'));
validator_es('ZRMC').value=validator_trim(validator_value);
validator_value=validator_trim(validator_value);
if(null==validator_value || ''==validator_value){
validator_log('error:用户名称不允许为空,长度最大为10。');
validator_makeFocus(validator_es('ZRMC'),'newadslwithtel');
return false;
}
validator_re=new RegExp(
"^[^\f\n\r\t\v]{0,10}$");
if(!validator_re.test(validator_value)){
validator_log('error:用户名称不允许为空,长度最大为10。');
validator_makeFocus(validator_es('ZRMC'),'newadslwithtel');
return false;
}
var validator_value=validator_getvalue(validator_es('ZRLX'));
validator_es('ZRLX').value=validator_trim(validator_value);
validator_value=validator_trim(validator_value);
if(null==validator_value || ''==validator_value){
validator_log('error:用户类型必选一个。');
validator_makeFocus(validator_es('ZRLX'),'newadslwithtel');
return false;
}
var validator_value=validator_getvalue(validator_es('ZRLR'));
validator_es('ZRLR').value=validator_trim(validator_value);
validator_value=validator_trim(validator_value);
if(null==validator_value || ''==validator_value){
validator_log('error:联系人不允许为空,长度最大为10。');
validator_makeFocus(validator_es('ZRLR'),'newadslwithtel');
return false;
}
validator_re=new RegExp(
"^[^\f\n\r\t\v]{0,10}$");
if(!validator_re.test(validator_value)){
validator_log('error:联系人不允许为空,长度最大为10。');
validator_makeFocus(validator_es('ZRLR'),'newadslwithtel');
return false;
}
var validator_value=validator_getvalue(validator_es('ZRDH'));
validator_es('ZRDH').value=validator_trim(validator_value);
validator_value=validator_trim(validator_value);
if(null==validator_value || ''==validator_value){
validator_log('error:联系电话不允许为空,长度最大为20。');
validator_makeFocus(validator_es('ZRDH'),'newadslwithtel');
return false;
}
validator_re=new RegExp(
"^[^\f\n\r\t\v]{0,20}$");
if(!validator_re.test(validator_value)){
validator_log('error:联系电话不允许为空,长度最大为20。');
validator_makeFocus(validator_es('ZRDH'),'newadslwithtel');
return false;
}
var validator_value=validator_getvalue(validator_es('ZRMM'));
validator_es('ZRMM').value=validator_trim(validator_value);
validator_value=validator_trim(validator_value);
if(null==validator_value || ''==validator_value){
validator_log('error:电话服务密码不允许为空,必须全数字,必须6位。');
validator_makeFocus(validator_es('ZRMM'),'newadslwithtel');
return false;
}
if(!validator_constant_telpassword_check(validator_value)){
validator_log('error:电话服务密码不允许为空,必须全数字,必须6位。');
validator_makeFocus(validator_es('ZRMM'),'newadslwithtel');
return false;
}
var validator_value=validator_getvalue(validator_es('ZRMM1'));
validator_es('ZRMM1').value=validator_trim(validator_value);
validator_value=validator_trim(validator_value);
if(null==validator_value || ''==validator_value){
validator_log('error:电话服务密码不允许为空,必须全数字,必须6位,必须两次输入的密码一致。');
validator_makeFocus(validator_es('ZRMM1'),'newadslwithtel');
return false;
}
if(!validator_constant_telpassword_check(validator_value)){
validator_log('error:电话服务密码不允许为空,必须全数字,必须6位,必须两次输入的密码一致。');
validator_makeFocus(validator_es('ZRMM1'),'newadslwithtel');
return false;
}
if(validator_value!=validator_getvalue(validator_es('ZRMM'))){
validator_log('error:电话服务密码不允许为空,必须全数字,必须6位,必须两次输入的密码一致。');
validator_makeFocus(validator_es('ZRMM1'),'newadslwithtel');
return false;
}
var validator_value=validator_getvalue(validator_es('Tel_TX_1'));
var validator_value=validator_getvalue(validator_es('Tel_TX_15'));
var validator_value=validator_getvalue(validator_es('Tel_TX_TXC1_15'));
var validator_otherfield_condition=false;
validator_re=new RegExp(
"-1");
validator_otherfield_condition=validator_re.test(validator_getvalue(validator_es('Tel_TX_15')));
if(validator_otherfield_condition){
validator_re=new RegExp(
"-1");
if(!validator_re.test(validator_value)){
validator_log('error:缩位拨号位数,当选择了缩位拨号必选,否则必须选择为-无缩位拨号。');
validator_makeFocus(validator_es('Tel_TX_TXC1_15'),'newadslwithtel');
return false;
}
}
var validator_otherfield_condition=false;
validator_re=new RegExp(
"0");
validator_otherfield_condition=validator_re.test(validator_getvalue(validator_es('Tel_TX_15')));
if(validator_otherfield_condition){
validator_re=new RegExp(
"^[123]+$");
if(!validator_re.test(validator_value)){
validator_log('error:缩位拨号位数,当选择了缩位拨号必选,否则必须选择为-无缩位拨号。');
validator_makeFocus(validator_es('Tel_TX_TXC1_15'),'newadslwithtel');
return false;
}
}
var validator_value=validator_getvalue(validator_es('Tel_TX_22'));
var validator_value=validator_getvalue(validator_es('Tel_TX_12'));
var validator_value=validator_getvalue(validator_es('Tel_TX_20'));
var validator_value=validator_getvalue(validator_es('Tel_TX_TXC1_116'));
validator_es('Tel_TX_TXC1_116').value=validator_trim(validator_value);
validator_value=validator_trim(validator_value);
var validator_value=validator_getvalue(validator_es('Tel_TX_TXC1_116_1'));
validator_es('Tel_TX_TXC1_116_1').value=validator_trim(validator_value);
validator_value=validator_trim(validator_value);
if(validator_value!=validator_getvalue(validator_es('Tel_TX_TXC1_116'))){
validator_log('error:呼出加锁密码在选择了长途或市内呼出加锁时必须填4位数字且两次输入一致,否则必须不填。');
validator_makeFocus(validator_es('Tel_TX_TXC1_116_1'),'newadslwithtel');
return false;
}
var validator_value=validator_getvalue(validator_es('Tel_ZHZH'));
validator_es('Tel_ZHZH').value=validator_trim(validator_value);
validator_value=validator_trim(validator_value);
if(null==validator_value || ''==validator_value){
validator_log('error:银行帐号必填,必须全数字,长度小于20位。');
validator_makeFocus(validator_es('Tel_ZHZH'),'newadslwithtel');
return false;
}
validator_re=new RegExp(
"^[0-9]{0,20}$");
if(!validator_re.test(validator_value)){
validator_log('error:银行帐号必填,必须全数字,长度小于20位。');
validator_makeFocus(validator_es('Tel_ZHZH'),'newadslwithtel');
return false;
}
var validator_value=validator_getvalue(validator_es('Tel_ZHZH1'));
validator_es('Tel_ZHZH1').value=validator_trim(validator_value);
validator_value=validator_trim(validator_value);
if(null==validator_value || ''==validator_value){
validator_log('error:银行帐号必填,必须全数字,长度小于20位,且两次输入必须一致。');
validator_makeFocus(validator_es('Tel_ZHZH1'),'newadslwithtel');
return false;
}
validator_re=new RegExp(
"^[0-9]{0,20}$");
if(!validator_re.test(validator_value)){
validator_log('error:银行帐号必填,必须全数字,长度小于20位,且两次输入必须一致。');
validator_makeFocus(validator_es('Tel_ZHZH1'),'newadslwithtel');
return false;
}
if(validator_value!=validator_getvalue(validator_es('Tel_ZHZH'))){
validator_log('error:银行帐号必填,必须全数字,长度小于20位,且两次输入必须一致。');
validator_makeFocus(validator_es('Tel_ZHZH1'),'newadslwithtel');
return false;
}
var validator_value=validator_getvalue(validator_es('ADSL_ZRDL'));
validator_es('ADSL_ZRDL').value=validator_trim(validator_value);
validator_value=validator_trim(validator_value);
if(null==validator_value || ''==validator_value){
validator_log('error:ADSL业务登录名必须8位内的小写字母或数字,同时必须sz开头,必须与已有的登录名不重复。');
validator_makeFocus(validator_es('ADSL_ZRDL'),'newadslwithtel');
return false;
}
validator_re=new RegExp(
"sz[0-9a-z]{0,6}$");
if(!validator_re.test(validator_value)){
validator_log('error:ADSL业务登录名必须8位内的小写字母或数字,同时必须sz开头,必须与已有的登录名不重复。');
validator_makeFocus(validator_es('ADSL_ZRDL'),'newadslwithtel');
return false;
}
return true;
}
function validator_constant_num38_check(value){
value=validator_trim(value);
if(null==value || ''==value){
return false;
}
validator_re=new RegExp(
"^[0-9]{3,8}$");
if(!validator_re.test(value)){
return false;
}
return true;
}
function validator_constant_telpassword_check(value){
value=validator_trim(value);
if(null==value || ''==value){
return false;
}
validator_re=new RegExp(
"^[0-9]{6}$");
if(!validator_re.test(value)){
return false;
}
return true;
}
</script>
<!-- validator自动机结束 -->

[code]
// 在此输入java代码
[/code]

呵呵,发多了,那两篇banq删掉吧~

这是一个快速原型来的,也没有真正完成
后天就要去北京10天,就不会继续弄了
贴上来给大家看看,相信还是有人会感兴趣的吧,;pp

上面的validator定义和javascript结果对不上
按上面的javascript结果,validator定义为:


<?xml version="1.0" encoding="GBK"?>
<!-- 当该文件生效时,所有的表单设置,与本xml冲突的均会被修改为一致 -->
<!-- needjs默认true -->
<form name=
"newadslwithtel" action="testnewadslwithtel_submit.jsp" needjs="true">
<!-- color在未来再做可配置,快速原型放弃 -->
<LostFocusColor/>
<GetFocusColor/>
<!-- global规则定义,对任意多个global来说,constant的name都应该是唯一的 -->
<global>validator
//global1.xml</global>
<!-- required默认false,spacetrim默认true -->
<!-- type默认text(包括password和select),非text需要做空值翻译为-1 -->
<field name=
"ZRMC" required="true" spacetrim="true">
<message>
用户名称不允许为空,长度最大为10。
</message>
<validator>
^[^\f\n\r\t\v]{0,10}$
</validator>
</field>
<field name=
"ZRLX" required="true" spacetrim="true">
<message>
用户类型必选一个。
</message>
</field>
<field name=
"ZRLR" required="true" spacetrim="true">
<message>
联系人不允许为空,长度最大为10。
</message>
<validator>
^[^\f\n\r\t\v]{0,10}$
</validator>
</field>
<field name=
"ZRDH" required="true" spacetrim="true">
<message>
联系电话不允许为空,长度最大为20。
</message>
<validator>
^[^\f\n\r\t\v]{0,20}$
</validator>
</field>
<field name=
"ZRMM" required="true" spacetrim="true">
<message>
电话服务密码不允许为空,必须全数字,必须6位。
</message>
<validator-constant>
telpassword
</validator-constant>
<otherfield name=
"ZRMM1" equal="true"/>
</field>
<field name=
"ZRMM1" required="true" spacetrim="true">
<message>
电话服务密码不允许为空,必须全数字,必须6位,必须两次输入的密码一致。
</message>
<validator-constant>
telpassword
</validator-constant>
</field>
<field name=
"Tel_TX_1" required="false" spacetrim="false" type="checkbox">
<message>
追查恶意呼叫。
</message>
</field>
<field name=
"Tel_TX_15" required="false" spacetrim="false" type="checkbox">
<message>
缩位拨号。
</message>
<otherfield name=
"Tel_TX_TXC1_15" equal="false">
<validator validator-condition=
"-1">
-1
</validator>
</otherfield>
<otherfield name=
"Tel_TX_TXC1_15" equal="false">
<validator validator-condition=
"0">
^[123]+$
</validator>
</otherfield>
</field>
<field name=
"Tel_TX_TXC1_15" required="false" spacetrim="false">
<message>
缩位拨号位数,当选择了缩位拨号必选,否则必须选择为-无缩位拨号。
</message>
</field>
<field name=
"Tel_TX_22" required="false" spacetrim="false">
<message>
来电显示。
</message>
</field>
<field name=
"Tel_TX_12" required="false" spacetrim="false" type="checkbox">
<message>
长途呼出加锁。
</message>
<otherfield name=
"Tel_TX_116" equal="false">
<validator validator-condition=
"-1">
^[\f\n\r\t\v]{0}$
</validator>
</otherfield>
<otherfield name=
"Tel_TX_116" equal="false">
<validator validator-condition=
"0">
^[0-9]{4}$
</validator>
</otherfield>
</field>
<field name=
"Tel_TX_20" required="false" spacetrim="false" type="checkbox">
<message>
市内呼出加锁。
</message>
<otherfield name=
"Tel_TX_116" equal="false">
<validator validator-condition=
"-1">
^[\f\n\r\t\v]{0,1}$
</validator>
</otherfield>
<otherfield name=
"Tel_TX_116" equal="false">
<validator validator-condition=
"0">
^[0-9]{4}$
</validator>
</otherfield>
</field>
<field name=
"Tel_TX_TXC1_116" required="false" spacetrim="true">
<message>
呼出加锁密码在选择了长途或市内呼出加锁时必须填4位数字,否则必须不填。
</message>
<otherfield name=
"Tel_TX_TXC1_116_1" equal="true"/>
</field>
<field name=
"Tel_TX_TXC1_116_1" required="false" spacetrim="true">
<message>
呼出加锁密码在选择了长途或市内呼出加锁时必须填4位数字且两次输入一致,否则必须不填。
</message>
</field>
<field name=
"Tel_ZHZH" required="true" spacetrim="true">
<message>
银行帐号必填,必须全数字,长度小于20位。
</message>
<validator>
^[0-9]{0,20}$
</validator>
<otherfield name=
"Tel_ZHZH1" equal="true"/>
</field>
<field name=
"Tel_ZHZH1" required="true" spacetrim="true">
<message>
银行帐号必填,必须全数字,长度小于20位,且两次输入必须一致。
</message>
<validator>
^[0-9]{0,20}$
</validator>
</field>
<field name=
"ADSL_ZRDL" required="true" spacetrim="true">
<message>
ADSL业务登录名必须8位内的小写字母或数字,同时必须sz开头,必须与已有的登录名不重复。
</message>
<validator>
sz[0-9a-z]{0,6}$
</validator>
<validator-javamethod>
com.sztelecom.ibss.chenwenjingtest.validatormethod.ADSL_ZRDL
</validator-javamethod>
</field>
</form>

实现validator的地方是有很多,比如javascript,sessionbean,entitybean(这两个是ejb),formaction,actionbean(这两个是struts),但在考虑到整体结构的时候,我们是否应该将这样的检测统一在同一个地方来判断呢?要说所有判断的话,我想,光数据库数据判断这一功能就可以判javascript(除非你是用access)死刑了。

你要看用户怎么要求的

如果用户录入的内容超过100项

你提交了才告诉他约束条件,用户会有意见d...

呵呵,可能你觉得这个需求很bt,但是,这样的需求在不少大的系统实际上肯定都有的

不懂,struts中的valitor不就是用来做这些事情的吗?
只要你提交错误的话仍然会返回到你的输入界面并保持你原来输入的内容
我想,现在做的大系统不太可能还不使用MVC吧?

> 不懂,struts中的valitor不就是用来做这些事情的吗?
> 只要你提交错误的话仍然会返回到你的输入界面并保持你原来
> 淙氲哪谌?> 我想,现在做的大系统不太可能还不使用MVC吧?

现在的人,要还没有提交,焦点到了下一个就知道
没办法吧?hoho~

不错,就是复杂了点可以作参考。

其实javascript级的validaotr很有必要,尤其是在网络速度不佳的时候。

总不能让客户等了1分钟后在修改吧。同时这样也可以减轻server的处理负担,提高速度。

没有详看您的代码,但 Struts 1.1 提供了一个 Web 端的表单校验框架(JavaScript 级别的),那个不够用吗?你写的是解决 Struts 1.1 不能解决的问题的吗?

struts 1.1没有解决交互关系的问题
我做的原型解决了这个问题
至少,是解决了一个和一个的关系问题
一个和多个的,今天开始继续,呵呵~

做好了记得给我一份,要不然,嘿嘿~~ 咔咔~~