`
larlf
  • 浏览: 107535 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

改进后的表单验证架构

阅读更多

今天几乎花了一天的时间改进系统中的表单验证架构。对于一表单验证部分,我有两点最基本的思想:一是验证的Rules以XML定义的形式同HTML页面相互分离,便于开发和维护;二是对于不依赖后台数据的验证以前台的方式进行,必要时也有方便的接口可以同后台进行数据上的交互。

 

这两点,在从前的代码中基本上都已经实现了,现在做的工作基本就是对功能的增强。当前能够实现到什么样的功能呢?可以先看一下这个验证规则的定义文件应该会有一个大概的感觉:

 

<validate name="dictionaryConfigCheck">
	<field name="编码" id="code">
		<rule name="required">
			<rule name="string" max="100">
				<if field="op" name="string" value="insert">
					<rule name="unique" sql="select x from DictionaryConfig x where x.code = '${code}'" msg="编码与现有的记录重复!" />
				</if>
				<if field="op" name="string" value="update">
					<if field="id" name="required">
						<rule name="unique" sql="select x from DictionaryConfig x where x.code = '${code}' and x.id != ${id}" msg="编码与现有的记录重复!" />
					</if>
				</if>
			</rule>
		</rule>
	</field>
	<field name="名称" id="name">
		<rule name="required" />
		<rule name="string" max="100" />
	</field>
	<field name="说明" id="remark">
		<if name="required">
			<rule name="string" min="5" />
			<rule name="string" max="2000" />
		</if>
	</field>
</validate>

首先应该可以很直观地看出来,Rule是可以嵌套的,而子节点的验证只会在父节点通过验证的情况下才会得以执行。这一点很重要,因为有些同后台交互的验证是比较耗资源的,运行时会有延迟的感觉,这种验证一定要在其它验证都通过时才去做。

 

unique是一个同后台交互的验证,会根据查询是否有结果来判断当前的值是否唯一。对于后台的验证,只要写一个Class实现Rule接口即可。

public interface Rule
{
	String check(Object v,Map<String, Object> ps) throws Exception;
}

 在验证规则的配置文件中,可以简单的写上这个类的Class,也可以稍加配置,用一个简单的名称来代替:

unique:"com.opesoft.pf.rules.UniqueRule"

 

可以看到,unique规则是被包含在一个<if>标签中的。这里引入了<if>和<ifnot> 标签,写在这个标签中的验证条件不会被显示到最终的出错信息中,只作为是否执行子验证的条件。上面的配置用这个标签实现了在Insert和Update情况下用不同的SQL来检验唯一性。

 

SQL语句中${code}这样的变量,在发送到后台前,会用表单中Code字段的值来填充,对于一些需要其它字段的值来辅助进行验证的条件,比如两个Passwrod中输入的密码是否一至,都可以用这种方式把另一个字段的值传进去。

 

对于验证结果的处理,别外写了一个FormWrapper的类。当前的方式是在前台的Label后面显示一个红色的叉号,鼠标移上去会显示出错的具体信息。因为这部分处理和Validate是分离的,所以很容易在以后扩展成不同的处理方式。

 

当然,当前的验证框架也有很多缺点,比如说就不支持现在比较流行的onchange后立即进行验证的方式,原因是考虑到因此可能会产生的复杂性及同表单完素的分离不可能做的非常好。不过我会努力的不断完善和改进它~

 

 

分享到:
评论

相关推荐

    JpetStore用AJAX改进用户体验

    AJAX开发。在JSP/Servlet实现的JPetStore项目基础上,在表单验证、表单输入、订单更新等环节增加AJAX技术,改善项目的用户体验。以下三个任务为必须完成部分,还可自行添加其他改进用户体验的功能。

    hibernate Struts2 spring 分页 国际化 表单验证 退出 最终修改版

    标题中的“Hibernate Struts2 Spring 分页 国际化 表单验证 退出 最终修改版”揭示了一个基于Java EE的Web应用项目,这个项目整合了三个关键的技术框架:Hibernate、Struts2和Spring,同时涵盖了分页、国际化、表单...

    开源表单系统tduck.zip

    `tduck-platform-master`则是系统的核心服务,负责处理表单的存储、检索、验证以及与其他系统集成等功能。这部分通常由Java编写,利用Spring Boot框架构建,因为它提供了快速开发、自动化配置和微服务架构支持。在...

    基于C#+ASP.NET实现的Web网页用户录入表单设计程序代码更新

    此外,ASP.NET的MVC(模型-视图-控制器)架构模式和Web Forms模式都能支持这样的表单设计,前者强调分层架构,后者则更注重页面生命周期管理。开发者可能利用这些工具实现了用户友好、高效的数据录入系统,并通过...

    表单的验证

    一旦UI设计与服务架构之间的范围被严格区分开来后,开发人员就需要更新和变化的技术集合了。  三、时刻想着用户  AJAX的最大机遇在于用户体验。在使应用更快响应和创新的过程中,定义Web应用的规则正在被重写...

    三层架构注册系统代码

    用户在这一层提交信息后,系统会进行相应的验证和处理。这个层级的设计应该注重用户体验,提供清晰的错误提示和流畅的操作流程。 2. 业务逻辑层(Business Logic Layer): 这一层是整个系统的核心,负责处理用户...

    简洁方便的 iOS 表单生成器.zip

    Eureka提供了一套灵活的API,可以轻松地定义表单字段,如文本输入、选择器、开关等,并能根据用户输入进行实时验证。 在Eureka中,表单被表示为一个`Form`对象,而每个表单字段则是`Row`的实例。`Row`类是可扩展的...

    ooform:PHP面向对象的表单生成器和验证器-开源

    通过面向对象的方式,你可以创建可复用的表单组件和验证规则,提高开发效率并降低出错的可能性。 **2. MVC架构** OOForm采用了Model-View-Controller(MVC)设计模式,将表单的逻辑(模型)、展示(视图)和用户...

    基于mvc架构的教学评估系统

    5. **评估统计**:系统自动统计评估结果,生成各类报表,供教师参考和改进教学。 6. **结果展示**:展示教师的整体评估得分,以及学生对各个指标的评价情况。 **系统设计**: 为了保证层次设计分明,系统可能会采用...

    Ajax 验证和Struts2

    - **基础架构**:Struts2 基于 WebWork 架构,并对其进行了改进和完善。Struts2 使用了改进版的 XWork2 框架,而不是原始版本的 XWork1。 - **XWork 框架**:XWork 框架是一个综合的命令模式框架,负责大部分与 ...

    bueno:表单,API的可组合验证器

    Bueno主要目的是对表单验证库(例如和进行改进,但也可以用作轻量级的API验证库。 如果您需要某些东西,您会喜欢的 :deciduous_tree: 小巧,。 :light_bulb: 富有表现力! 使用完整的布尔逻辑组成您的模式 :dizzy: ...

    struts2 Ognl表单提交问题

    - **改进后的请求处理类**(`LoginAction.java`):引入一个新的内部类`UserInfo`用于封装表单数据,并使用OGNL表达式进行数据绑定。 #### 四、改进后方案的详细实现 ##### 1. 登录页面 (`login.jsp`) ```jsp ;...

    商业编程-源码-验证通2010示例 PHP版 v3.0.zip

    了解MVC(Model-View-Controller)架构模式也可能有助于理解和使用这个验证系统,因为它经常被用于组织Web应用程序的代码。 在解压并查看源码之前,你可以先阅读任何可能存在的README文件或文档,这将提供关于如何...

    Struts2.0登陆验证代码

    Struts2.0是一个强大的Java Web开发框架,它在Struts1.0的基础上进行了大量改进,提供了更加灵活、高效和可扩展的MVC(Model-View-Controller)架构。Struts2.0的核心是Action类,它负责处理HTTP请求,并通过结果...

    企业核心基础架构优化(CIO)_SOA开发平台_BPM开发平台

    微软的核心基础架构解决方案为客户提供了一套诊断和改进IT基础架构的有效工具,帮助企业了解和控制IT成本、复杂性和安全性风险,同时提高运营的敏捷性。 **1.2 核心基础架构解决方案的关键组成部分** - **消除不必...

    使用 AngularJS 构建RIA前端架构实践

    随着AngularJS的版本迭代,它引入了众多新特性和改进,例如动画支持、表单验证、路由管理等。开发者应该紧跟AngularJS的最新发展,学习如何利用这些新特性优化应用程序,提高开发效率和用户体验。 贺天卓的个人介绍...

    yafelement:Yaf-elemen后台管理系统,支持多域名,多平台,自动加载,常驻内存,无限极分类,自动渲染视图,自动生成表单,表单验证,element模块组件化,快速生成一个模块的curd,界面简洁美观!

    Yaf-element基于Yaf element-ui vue,带无限极分类、多级分销、权限管理后台系统,element组件集成,模块...后台element ui + vue功能设置模型字段,自动生成表单、表格、渲染视图、表单验证等(增删改查操作),简而

    XFA知识简介

    XFA技术自2002年被Adobe推出后,一直在不断地演进,例如XFA 2.1、XFA 3.1等版本的推出,每个新版本都带来了一些改进和新特性。然而,随着HTML5和JavaScript的兴起,一些现代的表单解决方案开始采用更为通用的技术...

    Spring Security

    Java配置和表单登录 验证请求 处理登出 验证 多个HttpSecurity 方法安全 已配置对象的后续处理 安全命名空间配置 简介 开始使用安全命名空间配置 高级web功能 方法安全 默认的 AccessDecisionManager 验证管理器和...

    质量管理体系文件架构PPT学习教案.pptx

    质量手册为整个体系设定基调,程序文件将手册的原则转化为实际操作,作业指导书确保操作的一致性和准确性,而记录则验证这些活动是否按计划进行,为持续改进提供反馈。 在IT领域,这种架构尤其重要,因为软件开发、...

Global site tag (gtag.js) - Google Analytics