OperaMasks2.3增强的客户端校验
2009-10-26 由 peter 发表   评论(2条)   有2447人浏览

1. 常规的OperaMasks客户端校验

在旧版本的OperaMasks中,客户端校验始终是一块软肋。许多应用中客户端校验比较薄弱,关于OperaMasks客户端校验请参考OperaMasks参考手册

在旧版本的OperaMasks中,客户端校验主要存在以下问题:

  • 无法决定客户端校验的时机,只能是在 keyup 和表单提交时进行客户端校验

  • 不便于根据某些条件要求指定组件进行校验,例如在某个输入域触发onblur事件后要求另外一个输入域进行校验

  • 对于某些需要服务器端校验的场景没有提供较简易的方法进行

OperaMasks2.3兼容旧版本中的客户端校验,并且对这些场景进行了功能改进,使客户端校验得到加强,满足更多的客户端校验场景。

2. 增强的OperaMasks2.3客户端校验

2.1. 每个组件可以自行设置该组件何时进行校验

场景:表单中有一个w:textField组件,在用户输入完之后,组件失去焦点时对用户输入的值进行校验

<w:form clientValidate="true">
    <w:textField validateEvents="onblur">
        <f:validateLength  minimum="3" maximum="6" />
    </w:textField>
</w:form>

2.2. 每个组件可以校验的时机可以设置多个

场景:表单中有一个w:textField组件,在用户输入时或输入之后失去焦点时,对用户输入的值进行校验

<w:form clientValidate="true">
    <w:textField validateEvents="onblur,onkeyup">
        <f:validateLength minimum="3" maximum="6"/>
    </w:textField>
</w:form>

2.3. 可以方便地直接用js操作指定组件,要求其进行校验

场景:表单中有两个w:textField组件,在第一个组件输入完之后,根据输入值的不同决定是否要求第二个组件进行校验

<w:form clientValidate="true">
    <w:textField jsvar="username"  validateEvents="onkeyup">
        <f:validateLength minimum="3" maximum="6"/>
    </w:textField>
    <w:textField id="reValidateUsername"  validateEvents="onkeyup">
        <ajax:clientValidator>
            return username.validate();
        </ajax:clientValidator>
    </w:textField>
</w:form>

2.4. 可以在表单上进行全局设置,该表单中的组件将根据全局设置进行客户端校验

场景:表单中有很多输入组件,大部分组件都要求在失去焦点时进行校验,只有一个组件要求在输入时进行校验

<w:form clientValidate="true" validateEvents="onblur">
    <w:textField jsvar="username" >
        <f:validateLength minimum="3" maximum="6"/>
    </w:textField>
    <w:textField id="password"  validateEvents="onkeyup">
        <f:validateLength minimum="3" maximum="6"/>
    </w:textField>
</w:form>

2.5. 可以在表单上设置是否在提交前校验表单中所有组件

场景:当用户直接点提交按钮时,需要对表单中所有组件进行校验

<w:form clientValidate="true" validateEvents="onblur" validateBeforeSubmit="true">
    <w:textField jsvar="username" >
        <f:validateLength minimum="3" maximum="6"/>
    </w:textField>
</w:form>

2.6. 可以指定在表单提交前校验某个组件

场景:在表单中有多个组件,表单提交时只对某个组件进行校验

<w:form clientValidate="true" validateBeforeSubmit="false" onsubmit="return password.validate();">
    <w:textField jsvar="username" >
        <f:validateLength minimum="3" maximum="6"/>
    </w:textField>
    <w:textField jsvar="password">
        <f:validateLength minimum="3" maximum="6"/>
    </w:textField>
</w:form>

3. 客户端校验测试实例

客户端校验最常用的技巧

  • 使用jsf的校验<f:validateLength> <f:validateLongRange>等组件

  • 确定事件的时机 validateEvents="onkeyup"等

  • 非空校验allowBlank="false"

  • form提交时是否进行全局校验:<w:form validateBeforeSubmit="true">

  • 自定义客户端校验组件<ajax:clientValidator>

希望通过此实例,让大家对客户端校验有更深的认识。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE HTML PUBLIC "" "">
<f:view xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
	xmlns:w="http://www.apusic.com/jsf/widget" xmlns:layout="http://www.apusic.com/jsf/layout"
	xmlns:h="http://java.sun.com/jsf/html" xmlns:ajax="http://www.apusic.com/jsf/ajax"
	renderKitId="AJAX">
	<w:head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	</w:head>
	<w:page title="客户端校验测试">
		1<w:form validateBeforeSubmit="true" validateEvents="onblur">
			<layout:panelGrid columns="3">
				<h:outputText value="用户名:"></h:outputText>
				2<w:textField id="username" allowBlank="false" blankText="用户名用户名不能为空">
					3<f:validateLength minimum="3" maximum="16"></f:validateLength>
				</w:textField>
				<h:outputText value="组件失去焦点时对用户输入的值进行校验,校验时机可以多个"></h:outputText>

				<h:outputText value="密码:"></h:outputText>
				<w:textField id="password" jsvar="password">
				</w:textField
				<h:outputText value=""></h:outputText>

				<h:outputText value="密码确认:"></h:outputText>
				<w:textField id="passwordValidate" validatorMessage="密码确认与前一次不同,请重新输入" validateEvents="onkeyup"
					jsvar="passwordValidate">
					4<ajax:clientValidator>
						return value == password.getValue();
					</ajax:clientValidator>
				</w:textField>
				<h:outputText value="表单中的一个构件在某个事件发生时对自己和其他构件进行校验,比如常见的确认密码校验"></h:outputText>
				
				<h:outputText value="电子邮箱:"></h:outputText>
				<w:textField id="email" validateEvents="onkeyup">
					<ajax:clientValidator>
						var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/;
						return pattern.test(value);
					</ajax:clientValidator>
				</w:textField>
				<h:outputText value="测试正则表达式校验"></h:outputText>
			</layout:panelGrid>
			<w:button id="submit" value="提交"/>
		</w:form>
	</w:page>
</f:view>
1

validateBeforeSubmit="true" 指定对表单中所有组件进行校验,validateEvents="onblur" 指明校验发生的时机

2

allowBlank="false" 指明该组件不能为空,blankText="用户名用户名不能为空"在校验非空时提示信息

3

采用jsf中的校验器f:validateLength,此校验并不校验非空,非空由allowBlank来进行

4

ajax:clientValidator是一个非常强的大的客户端校验组件,ajax:clientValidator里面写的是js,value指的是当前的组件的输入值,password是引用jsvar设定为password的ext组件,ajax:clientValidator中除了可返回boolean类型,还可以返回String类型,如果返回String类型,那么该String将作为错误信息展现,此处还可以通过ajax请求来获得服务器端的值,用于放在用户名处,来校验用户名在数据库中唯一。

4. OperaMasks2.3的客户端校验总结

目前OperaMasks2.3的客户端校验基本满足所需的场景,当然金无足赤,人无完人,OperaMasks也存在少数覆盖不到的场景,为此,我们正在努力的去对特殊场景进行实现,并且我们会提供相应的解决方案,解决相应场景的问题。

所有评论
jones 2010-04-18 评论道:
不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!不错!
会喝特仑苏的奶牛 2009-10-26 评论道:
很好,刚需要这些知识。谢谢PETER
1   共1页
您还没有登录,请登录后发表评论