今天几乎花了一天的时间改进系统中的表单验证架构。对于一表单验证部分,我有两点最基本的思想:一是验证的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后立即进行验证的方式,原因是考虑到因此可能会产生的复杂性及同表单完素的分离不可能做的非常好。不过我会努力的不断完善和改进它~
分享到:
相关推荐
AJAX开发。在JSP/Servlet实现的JPetStore项目基础上,在表单验证、表单输入、订单更新等环节增加AJAX技术,改善项目的用户体验。以下三个任务为必须完成部分,还可自行添加其他改进用户体验的功能。
一旦UI设计与服务架构之间的范围被严格区分开来后,开发人员就需要更新和变化的技术集合了。 三、时刻想着用户 AJAX的最大机遇在于用户体验。在使应用更快响应和创新的过程中,定义Web应用的规则正在被重写...
Bueno主要目的是对表单验证库(例如和进行改进,但也可以用作轻量级的API验证库。 如果您需要某些东西,您会喜欢的 :deciduous_tree: 小巧,。 :light_bulb: 富有表现力! 使用完整的布尔逻辑组成您的模式 :dizzy: ...
Yaf-element基于Yaf element-ui vue,带无限极分类、多级分销、权限管理后台系统,element组件集成,模块...后台element ui + vue功能设置模型字段,自动生成表单、表格、渲染视图、表单验证等(增删改查操作),简而
Java配置和表单登录 验证请求 处理登出 验证 多个HttpSecurity 方法安全 已配置对象的后续处理 安全命名空间配置 简介 开始使用安全命名空间配置 高级web功能 方法安全 默认的 AccessDecisionManager 验证管理器和...
应广大用户群体建议,此次版本改动所有涉及编辑器和视频播放的模块,全部采用百度编辑器(ueditor)及ckplayer视频播放器,改进后的视频(flv,mp4等格式视频)支持在手机上播放。且新版本X1.0增加了手机短信接口,可以...
Clientworks 是一个支持云的、基于身份验证的客户端仪表板系统,用于在客户-营销人员基础架构内进行高效通信。 它的特点是: 轻量级服务器设置 - 没有庞大的框架 简化信息交换的直观布局 精心设计的管理 GUI 可轻松...
MobX架构表单MobX Schema Form是一组松耦合组件的一部分,这些组件用于管理,呈现和验证基于MobX的应用程序中的表单。详细文档: mobx-schema-form概述mobx-schema-form基于格式的架构和表单定义呈现表单小部件...
2.3.3 Visual Studio 2010改进 2.4 编码模型 2.4.1 代码隐藏文件如何与页面连接 2.4.2 控件标签如何与页面变量连接 2.4.3 事件如何与事件处理程序连接 2.5 Web项目 2.5.1 基于项目的开发 2.5.2 创建...
应广大用户群体建议,此次版本改动所有涉及编辑器和视频播放的模块,全部采用百度编辑器(ueditor)及ckplayer视频播放器,改进后的视频(flv,mp4等格式视频)支持在手机上播放。且新版本X1.0增加了手机短信接口,可以...
应广大用户群体建议,此次版本改动所有涉及编辑器和视频播放的模块,全部采用百度编辑器(ueditor)及ckplayer视频播放器,改进后的视频(flv,mp4等格式视频)支持在手机上播放。且新版本X1.0增加了手机短信接口,可以...
2.3.3 Visual Studio 2010改进 37 2.4 编码模型 42 2.4.1 代码隐藏文件如何与页面连接 44 2.4.2 控件标签如何与页面变量连接 44 2.4.3 事件如何与事件处理程序连接 46 2.5 Web项目 47 2.5.1 基于项目的...
应广大用户群体建议,此次版本改动所有涉及编辑器和视频播放的模块,全部采用百度编辑器(ueditor)及ckplayer视频播放器,改进后的视频(flv,mp4等格式视频)支持在手机上播放。且新版本X1.0增加了手机短信接口,可以...
schema是用于验证Python数据结构的库,例如从配置文件,表单,外部服务或命令行解析获得的数据结构,这些数据结构已从JSON / YAML(或其他)转换为Python数据类型。 PyValidator是(几乎)Python Schema的直接替代...
许多架构更改和改进 支持参考 基本路径和授权从 apiConfig 移至 api{name}.json 文件 更健壮/可扩展的身份验证定义块 添加了 POST/PUT 请求正文功能 添加了用于请求正文的数组类型和接口 尺寸和订单支持 序列化 ...
许多架构更改和改进 支持参考 基本路径和授权从 apiConfig 移至 api{name}.json 文件 更健壮/可扩展的身份验证定义块 添加了 POST/PUT 请求正文功能 添加了用于请求正文的数组类型和接口 尺寸和订单支持 序列化 ...
21.3.1查询当前通过身份验证的用户及其会话的SessionRegistry 176 22.匿名身份验证 177 22.1概述 177 22.2配置 178 22.3 AuthenticationTrustResolver 179 23. WebSocket安全 180 23.1 WebSocket配置 181 23.2 ...
6.1 表单验证与资源文件 63 6.2 用户注册 69 6.3 用户登录 73 6.3.1 登录的数据库查询 73 6.3.2 使用Session维持会话 74 6.3.3 自定义Codec实现对 密码加密 75 6.4 登录保护 76 6.5 本章小结 79 第7章 购物车与订单...
6.4 改进Log4j 6.5 小结 第七章 Ant使用指南 7.1 Ant介绍 7.1.1 Ant简介 7.1.2 为什么要使用Ant 7.2 建立Ant的开发环境 7.2.1 下载Ant 7.2.2 配置Ant 7.3 Ant的使用方法 7.3.1 Ant能完成的工作 7.3.2 配置文件build....