云自無心水自閑

          天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
          posts - 288, comments - 524, trackbacks - 0, articles - 6
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Flex2.0中使用Validator

          Posted on 2006-04-14 11:14 云自無心水自閑 閱讀(1829) 評論(1)  編輯  收藏 所屬分類: FlexFlex2
          在Flex2.0中, Validator組件的使用方式和1.5中相比, 進(jìn)行了一些改變, 不再需要定義Model, 可以在Validator屬性中直接引用Form成員了.
          ????<mx:Form?id="loginForm">
          ????????
          <mx:Text?text="?{AtsModelLocator.getInstance().loginFailMessage?}"?width="80%"?color="red"/>
          ????
          ????????
          <mx:FormItem?label="Username:?"?required="true">
          ????????????
          <mx:TextInput?id="username"?/>
          ????????
          </mx:FormItem>

          ????????
          <mx:FormItem?label="Password:?"?required="true">
          ????????????
          <mx:TextInput?id="password"?/>
          ????????
          </mx:FormItem>
          ????
          </mx:Form>


          ????
          <mx:ControlBar>
          ????????
          <mx:Button?id="loginSubmit"?label="Login"?mouseUp="loginUser()"/>
          ????
          </mx:ControlBar>
          ????
          ????
          <mx:StringValidator?id="userNameValidator"?source="{username}"?property="text"
          ????????tooShortError
          ="This?string?is?shorter?than?the?minimum?allowed?length?of?3.?"?
          ????????tooLongError
          ="This?string?is?longer?than?the?maximum?allowed?length?of?20."?
          ????????minLength
          ="4"?maxLength="20"/>

          ????
          <mx:StringValidator?id="userPassValidator"?source="{password}"?property="text"
          ????????tooShortError
          ="This?string?is?shorter?than?the?minimum?allowed?length?of?6.?"?
          ????????tooLongError
          ="This?string?is?longer?than?the?maximum?allowed?length?of?10."?
          ????????minLength
          ="4"?maxLength="20"/>

          這樣就定義好了兩個(gè)Validator, 可以對用戶名和用戶密碼進(jìn)行校驗(yàn).
          但是怎么使用這兩個(gè)Validator呢?

          我是這樣用的:
          ????<mx:Script>
          ????
          <![CDATA[
          ????????import?mx.controls.Alert;
          ????????import?mx.events.ValidationResultEvent;
          ????????import?mx.validators.ValidationResult;??
          ????????????
          ???????import?com.ats.vo.LoginVO;
          ???????import?com.ats.control.LoginEvent;
          ???????
          ???????import?mx.validators;
          ???????
          ???????public?
          function?loginUser()?:?void
          ???????{
          ??????????
          if?(?!?modelCheckValid?)?{
          ??????????????modelCheckValid?
          =?true;
          ??????????????
          return;
          ??????????}
          ???????????
          ??????????
          var?loginVO?:?LoginVO?=?new?LoginVO();
          ??????????loginVO.username?
          =?username.text;
          ??????????loginVO.password?
          =?password.text;
          ????????????
          ????????????
          var?event?:?LoginEvent?=?new?LoginEvent(?loginVO?);
          ????????????dispatchEvent(?event?);
          ???????}
          ???????
          ???????private?
          var?modelCheckValid?:?Boolean?=?true;
          ????]]
          >
          ????
          </mx:Script>

          ????
          <mx:Form?id="loginForm">
          ????????
          <mx:Text?text="?{AtsModelLocator.getInstance().loginFailMessage?}"?width="80%"?color="red"/>
          ????
          ????????
          <mx:FormItem?label="Username:?"?required="true">
          ????????????
          <mx:TextInput?id="username"?/>
          ????????
          </mx:FormItem>

          ????????
          <mx:FormItem?label="Password:?"?required="true">
          ????????????
          <mx:TextInput?id="password"?/>
          ????????
          </mx:FormItem>
          ????
          </mx:Form>


          ????
          <mx:ControlBar>
          ????????
          <mx:Button?id="loginSubmit"?label="Login"?mouseUp="loginUser()"/>
          ????
          </mx:ControlBar>
          ????
          ????
          <mx:StringValidator?id="userNameValidator"?source="{username}"?property="text"
          ????????tooShortError
          ="This?string?is?shorter?than?the?minimum?allowed?length?of?3.?"?
          ????????tooLongError
          ="This?string?is?longer?than?the?maximum?allowed?length?of?20."?
          ????????minLength
          ="4"?maxLength="20"
          ????????invalid
          ="modelCheckValid=false"
          ????????trigger
          ="{loginSubmit}"
          ????????triggerEvent
          ="mouseDown"/>

          ????
          <mx:StringValidator?id="userPassValidator"?source="{password}"?property="text"
          ????????tooShortError
          ="This?string?is?shorter?than?the?minimum?allowed?length?of?6.?"?
          ????????tooLongError
          ="This?string?is?longer?than?the?maximum?allowed?length?of?10."?
          ????????minLength
          ="4"?maxLength="20"
          ????????invalid
          ="modelCheckValid=false"
          ????????trigger
          ="{loginSubmit}"
          ????????triggerEvent
          ="mouseDown"/>



          為什么這么復(fù)雜地在Validator中定義trigger, triggerEvent呢?
          原因是這樣的: 如果不是在Validator的invalid事件中去設(shè)置modelCheckValid這個(gè)標(biāo)志量.
          就需要在loginUser()函數(shù)中對所有Validator進(jìn)行判斷, 代碼會顯得比較臃腫復(fù)雜.
          而且如果需要考慮是否需要一次性顯示出所有校驗(yàn)失敗的錯(cuò)誤.
          代碼示例:
          ????<mx:Script>
          ????
          <![CDATA[
          ????????import?mx.controls.Alert;
          ????????import?mx.events.ValidationResultEvent;
          ????????import?mx.validators.ValidationResult;??
          ????????????
          ???????import?com.ats.vo.LoginVO;
          ???????import?com.ats.control.LoginEvent;
          ???????
          ???????import?mx.validators;
          ???????
          ???????public?
          function?loginUser()?:?void
          ???????{
          ???????
          ??????????
          var?vrEvent?:?ValidateResultEvent;
          ??????????
          ??????????
          var?checkFailed?:?Boolean?=?false;
          ??????????
          ??????????vrEvent?
          =?userNameValidator.validate();
          ??????????
          if?(?vrEvent.results?!=?null?&&?vrEvent.results.length?>?0?)?{
          ??????????????
          //?驗(yàn)證失敗
          ??????????????checkFailed?=?true;
          ??????????}
          ??????????
          ??????????vrEvent?
          =?userPassValidator.validate();
          ??????????
          if?(?vrEvent.results?!=?null?&&?vrEvent.results.length?>?0?)?{
          ??????????????
          //?驗(yàn)證失敗
          ??????????????checkFailed?=?true;
          ??????????}
          ??????????
          ??????????
          if?(?checkFailed?)?return;
          ???????????
          ??????????
          var?loginVO?:?LoginVO?=?new?LoginVO();
          ??????????loginVO.username?
          =?username.text;
          ??????????loginVO.password?
          =?password.text;
          ????????????
          ????????????
          var?event?:?LoginEvent?=?new?LoginEvent(?loginVO?);
          ????????????dispatchEvent(?event?);
          ???????}
          ???????
          ????]]
          >
          ????
          </mx:Script>

          ????
          <mx:Form?id="loginForm">
          ????????
          <mx:Text?text="?{AtsModelLocator.getInstance().loginFailMessage?}"?width="80%"?color="red"/>
          ????
          ????????
          <mx:FormItem?label="Username:?"?required="true">
          ????????????
          <mx:TextInput?id="username"?/>
          ????????
          </mx:FormItem>

          ????????
          <mx:FormItem?label="Password:?"?required="true">
          ????????????
          <mx:TextInput?id="password"?/>
          ????????
          </mx:FormItem>
          ????
          </mx:Form>


          ????
          <mx:ControlBar>
          ????????
          <mx:Button?id="loginSubmit"?label="Login"?mouseUp="loginUser()"/>
          ????
          </mx:ControlBar>
          ????
          ????
          <mx:StringValidator?id="userNameValidator"?source="{username}"?property="text"
          ????????tooShortError
          ="This?string?is?shorter?than?the?minimum?allowed?length?of?3.?"?
          ????????tooLongError
          ="This?string?is?longer?than?the?maximum?allowed?length?of?20."?
          ????????minLength
          ="4"?maxLength="20"/>

          ????
          <mx:StringValidator?id="userPassValidator"?source="{password}"?property="text"
          ????????tooShortError
          ="This?string?is?shorter?than?the?minimum?allowed?length?of?6.?"?
          ????????tooLongError
          ="This?string?is?longer?than?the?maximum?allowed?length?of?10."?
          ????????minLength
          ="4"?maxLength="20"/>

          這種方法也是可行的.
          至于具體使用哪一個(gè), 憑自己的喜好了.



          評論

          # re: Flex2.0中使用Validator  回復(fù)  更多評論   

          2007-09-27 09:45 by tiangej
          《目的》:
          畫面項(xiàng)目"用戶id"必須是英文數(shù)字,且長度在4--20之間。
          于是我計(jì)劃用 mx:StringValidator(字符串驗(yàn)證) 和 mx:RegExpValidator(正則驗(yàn)證)同時(shí)作用于上述的項(xiàng)目上。

          《結(jié)果》:
          只有最后定義的驗(yàn)證項(xiàng)發(fā)揮作用。

          《問題》:
          是否能夠?qū)ν惠斎腠?xiàng)目進(jìn)行兩種以上的數(shù)據(jù)校驗(yàn)(用Validator對象)?
          主站蜘蛛池模板: 大荔县| 乌兰县| 温泉县| 栾城县| 光山县| 林周县| 阳泉市| 普陀区| 上栗县| 扎赉特旗| 垣曲县| 若羌县| 湘潭市| 吉安县| 青浦区| 陕西省| 宁国市| 班玛县| 巴林右旗| 儋州市| 南开区| 绥化市| 唐山市| 西峡县| 乌兰县| 五峰| 灌云县| 镇远县| 岑巩县| 育儿| 临汾市| 江源县| 柏乡县| 泗洪县| 霍邱县| 二连浩特市| 鹰潭市| 绥棱县| 会泽县| 连江县| 盈江县|