這個東西,不知道大家有沒有興趣,大概用了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自動機結束 -->
<p class="indent">[code]
// 在此輸入java程式碼
<p class="indent">
|