云自無(wú)心水自閑

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

          Flex2.0中使用Validator

          Posted on 2006-04-14 11:14 云自無(wú)心水自閑 閱讀(1832) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): 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, 可以對(duì)用戶(hù)名和用戶(hù)密碼進(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ù)中對(duì)所有Validator進(jìn)行判斷, 代碼會(huì)顯得比較臃腫復(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è), 憑自己的喜好了.



          評(píng)論

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

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

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

          《問(wèn)題》:
          是否能夠?qū)ν惠斎腠?xiàng)目進(jìn)行兩種以上的數(shù)據(jù)校驗(yàn)(用Validator對(duì)象)?
          主站蜘蛛池模板: 工布江达县| 太康县| 措勤县| 玉山县| 五台县| 石狮市| 石楼县| 仪陇县| 芒康县| 车致| 青阳县| 黔江区| 延川县| 普洱| 石城县| 宁南县| 大厂| 酉阳| 中宁县| 肇东市| 绥化市| 丹东市| 高平市| 融水| 巴青县| 株洲县| 上饶市| 南宫市| 峨眉山市| 鄂州市| 鄂托克前旗| 卓尼县| 丹江口市| 卫辉市| 潞城市| 建始县| 孟连| 桦南县| 汉源县| 奇台县| 鄂托克旗|