`

Flex 之联合验证

阅读更多

     在数据库编辑模块的代码中通常在增加一条记录时,都会碰到数据验证的问题,有时候需要多个字段的验证,才能确保符合存储条件,在网上查看了一些联合验证的例子,并结合自己的实际情况写了一个联合验证的功能,基本上分为两个类,一个是MultipleValidaotr ,它继承自 EventDisaptcher,其中含有一个private属性的Array用来存放多个验证类Vlidator。还有个继承自Textinput的ValidatorTextinput ,在它的类中加入了一个Validator。其目标指向ValodatorTextinput本身,这个输入框就添加了验证非空功能。一旦某个验证框通过,则将其加入MultipleValidaotr,并标识为验证为通过,这样等到所有的验证框都通过验证之后来触发事件。在主体函数里写验证通过和不通过的处理函数来触发验证是否通过的执行代码。

 

具体代码如下:

1.带有非空验证的TextInput组件:

public class ValidatorTextInput extends TextInput
	{

		
		public function ValidatorTextInput()
		{
			super();
			this.Validate.source=this;
			this.Validate.property="text";
			this.Validate.required=true;
			this.Validate.requiredFieldError="不能为空";
		}
		
		[Bindable]
		private var _validate:Validator=new Validator();
		
		public function set Validate(_validate:Validator):void
		{
			this._validate=_validate;
		}
		
		public function get Validate():Validator
		{
			return this._validate;
		}

	}

 2.联合验证类MultipleValidaotr:

[Bindable]
	public class MultipleValidator extends EventDispatcher
	{
        private var _passedCallBack : Function;

        private var _failedCallBack : Function;

        private var validators : ArrayCollection = new ArrayCollection();

        private var voteMap : Object = new Object();


        public function MultipleValidator( _validatorInitializedValue : Boolean = false ) {
        	super();
        	validators.removeAll();
        }
        
        private function onChange(event:Event):void{
        	dispatchEvent(new Event(Event.CHANGE));
        }

        public function addValidator( validator : Validator) : void {
        	if(!validators.contains(validator)){
        			validator.trigger=this;
        			validator.triggerEvent=Event.CHANGE;
        			validator.source.addEventListener(FlexEvent.VALUE_COMMIT,onChange);
        			validator.source.addEventListener(Event.CHANGE,onChange);
        		
        			validator.addEventListener(ValidationResultEvent.INVALID,function(event:ValidationResultEvent):void{
        				voteMap[event.target.source]=false;
        				_failedCallBack();
        			});
        			validator.addEventListener(ValidationResultEvent.VALID,function(event:ValidationResultEvent):void{
        				voteMap[event.target.source]=true;        				
			        	refresh();
        			});
        			validators.addItem(validator);
        	}
        }

        public function addValidators( _validators : Array ) : void {
        	if(_validators==null){
        		return;
        	}
        	for each ( var validator : Validator in  _validators){
        		addValidator(validator);
            }
            dispatchEvent(new Event(Event.CHANGE));//刚进入界面就进行一次验证,使用户知道哪些必需填写
        }

        public function removeValidator(validator:Validator):void{
        	delete voteMap[validator.source];
        	if(validators.contains(validator)){
        		validator.source.removeEventListener(FlexEvent.VALUE_COMMIT,onChange);
        		validator.source.removeEventListener(Event.CHANGE,onChange);
        		validators.removeItemAt(validators.getItemIndex(validator));
        	}
        	refresh();
        }

        public function set passedCallBack( _passedCallBack : Function ) : void {
        	this._passedCallBack = _passedCallBack;
        }

        public function set failedCallBack( _failedCallBack : Function ) : void {
        	this._failedCallBack = _failedCallBack;
        }

        public function refresh():void{
        	for ( var index : String in voteMap ) {
					if ( voteMap[index] == false )
					{
						_failedCallBack();
						return;
					}
				}
				_passedCallBack();
        }
	}

 3.调用验证功能的代码:

public function AddMultipleValidator(e:FlexEvent):void
		{
			multiplevalidator.failedCallBack=function():void{
					btnOK.enabled=false;
				};
			multiplevalidator.passedCallBack=function():void{
					btnOK.enabled=true;
				};				
			multiplevalidator.addValidators(ValidateInput(this));			
		}
		
        
        private var multiplevalidator:MultipleValidator=new MultipleValidator(false);
        
        public function ValidateInput(container:Container):Array
        {   
        	var validatorArray:Array=[];
        	var childs:Array=container.getChildren();
        	for each(var child:UIComponent in childs)
        	{
        		if(child is ValidatorTextInput)
        		{
        		   	validatorArray.push((child as ValidatorTextInput).Validate);
        		}
        		else if(child is ValidatorDateField)
        		{
        			validatorArray.push((child as ValidatorDateField).Validate);
        		}
        		   
        	}
        	
        	return validatorArray;
        }

 

分享到:
评论

相关推荐

    flex 表单数据合法性验证

    对于多个表单字段的联合验证,可以使用Form或ValidatorGroup来实现。Form组件会自动对所有子组件进行验证,而ValidatorGroup允许自定义验证顺序和逻辑。 7. **错误显示**: Flex提供了ErrorTip和ErrorMessage组件...

    flex4与java结合实例

    开发者可以使用Flex SDK的命令行工具或IDE的调试功能,对Flex和Java代码进行联合调试。 总的来说,Flex4与Java的结合使得开发者可以充分利用两者的优点,创建出既美观又功能强大的Web应用。对于初学者,理解这两个...

    一个flex+java +mysql开发的实例

    在IT行业中,Flex、Java和MySQL是三种非常重要的技术,它们常常被联合使用来构建高效、用户友好的Web应用程序。本实例将详细讲解如何利用这些技术进行开发。 Flex是一种基于Adobe AIR的应用程序开发框架,主要用于...

    flex连接java服务端

    8. **调试与测试**: 开发过程中,开发者可能需要使用如Flex Builder或IntelliJ IDEA等IDE的调试工具,对Flex客户端和Java服务端进行联合调试,以确保通信的正确性。 9. **性能优化**: 优化Flex与Java服务端的通信...

    flex_连接数据库

    ### Flex与Java联合连接数据库详解 #### 一、引言 在现代Web开发中,Flex是一种流行的客户端技术,用于构建富互联网应用(RIA)。然而,Flex本身并不具备直接访问数据库的功能,它需要通过中间层服务如HTTP Service...

    flex java开发

    通过阅读《富互联网应用程序与Adobe Flex Java开发》,开发者不仅可以掌握Flex和Java的联合开发技能,还能了解到如何构建高效、可扩展的RIA解决方案,从而在Web开发领域取得专业进步。这本书是Flex和Java开发者案头...

    Flex 制作的 文件上传工具 C#语言

    总的来说,这个项目展示了如何利用Flex和C#的强强联合,创建一个具备高级UI和高效异步处理能力的文件上传工具。在实际应用中,这样的工具对于提升网站或应用的用户体验至关重要,特别是在处理大量文件上传场景下。

    DDS的Verilog设计及Quartus_与Matlab联合仿真

    此外,通过QuartusⅡ和Matlab软件的联合仿真验证了设计的正确性和有效性。文中特别强调了模块中的相位累加器对于提高系统的频率分辨率和实现快速频率切换的重要性。 #### DDS的工作原理 直接数字频率合成器(DDS)...

    FLEX白皮书1

    通信约定是指 FLEX 协议中关于数据传输和通信的约定,包括数据加密、身份验证、访问控制等方面的安全机制设计和实现。 1.2.3 安全约定 安全约定是指 FLEX 协议中关于数据安全和隐私保护的约定,包括数据加密、访问...

    直接数字频率合成器的CPLD设计及QuartusⅡ与MATLAB联合仿真.pdf

    DDS的设计采用了VHDL语言,并通过QuartusⅡ与MATLAB软件对设计进行了联合仿真,验证了设计的正确性。 DDS的频率合成原理可以用图1所示。DDS的输出频率可以通过改变频率控制字来实现。DDS的频率控制字是DDS的核心...

    编译原理lexyacc的联合使用实验报告.zip

    它根据.y或.bison文件(包含语法规则的定义)生成C或C++代码,用于解析由lex产生的词法单元流,验证其是否符合预定义的语法规则。如果符合,yacc生成抽象语法树(AST),这是源代码结构的抽象表示,可用于中间代码...

    DDS的Verilog设计及QuartusⅡ与Matlab联合仿真.pdf

    该设计可以与QuartusⅡ和Matlab软件进行联合仿真,以验证设计的正确性。 DDS的组成部分包括相位累加器、函数表ROM存储器、D/A转换器及低通滤波器。 DDS的工作原理是,相位累加器在时钟的作用下,以频率控制字为步进...

    FPGA下载线的做法

    对于FPGA的设计与开发,下载线是必不可少的工具之一,它负责将设计好的电路图通过软件下载到FPGA芯片上,实现电路功能的验证与测试。然而,市面上的FPGA下载线往往价格不菲,且有时难以快速获取。因此,掌握FPGA下载...

    虚拟样机软件与其他CAD_CAE软件在机械系统方案设计中的联合应用.pdf

    通过建立刚体模型、生成柔性体的模态中性文件、建立刚柔结合的仿真模型,然后进行动力学仿真,最后对柔性体进行应力应变分析,以验证设计方案的可行性并指导实际设计的改进。 综合以上内容,虚拟样机软件与CAD和CAE...

    计科17-6班-陆玺文-03170908-实验bison11

    - 使用Flex和Bison联合设计的解释器能处理更复杂的运算,如括号、优先级、函数调用等。 - 设计方案应考虑错误处理机制,以确保输入的合法性。 4. **目标4:软件工程方法** - 编译器的开发需要遵循软件工程的方法...

    ADAMS_Simulink柔性机械与控制系统仿真

    ### ADAMS_Simulink柔性机械与控制系统仿真的关键技术点 ...此外,通过实际案例的应用,可以验证所提出的联合仿真方法的有效性和实用性,为未来的柔性机械臂控制系统设计提供了新的思路和技术手段。

    编译原理学习

    Lex和Yacc的联合使用是编译器设计中的一项基础技术。具体使用流程大致如下:首先利用Lex定义词法规则,生成词法分析器;然后,通过Yacc定义语法规则,生成语法分析器;最后将二者生成的代码通过编译器链接成完整的...

    可综合的VerilogHDL设计实例.pdf

    同时,它们还使用Synergy和Synplify综合器分别针对Xilinx和Altera的FPGA进行了综合,并在Xilinx 3098和Altera Flex10K10上完成了布局布线和门级仿真,确保了设计的可行性和可靠性。 设计RISC CPU的目的不仅仅是展示...

    编译原理大程,简单的C语言编译器.zip

    4. **结构体与联合**:C语言支持结构体和联合,这需要在语义分析阶段进行特殊处理,以确保正确地访问成员。 三、构建C语言编译器的关键步骤 1. **设计词法分析器**:利用正则表达式或自动生成工具(如Flex)定义...

Global site tag (gtag.js) - Google Analytics