易码技术论坛

 找回密码
 加入易码
搜索
查看: 216878|回复: 2

[教程] 关于表单的生成和验证的一些想法

[复制链接]
发表于 2007-4-18 11:32:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2007-4-18 12:53:42 | 显示全部楼层
努力学习啊````
看不懂

以后研究```


板凳

飘过  

顺带

支持LZ
 楼主| 发表于 2007-4-18 10:19:56 | 显示全部楼层 |阅读模式
很久没动静了,发点自己最近的心得。

首先说说什么是表单。在一个页面上,往往会有让用户输入一些信息的地方,而且这些地方往往在底部都有一个“提交”功能的按钮,比如论坛的用户注册、登录、发贴,或者Google和百度的搜索功能,这些都是表单。表单就是负责提示用户输入信息,并且在用户“提交”的时候把表单送回服务器,以便于服务器做出相应的处理。

关于表单的生成,一般情况下都是在页面文件里面写好了的,比如在HTML里面使用<form/>标签。在一般看来没有什么太大的问题,这也是传统的做法。
不过在JSP或ASP等动态页面里面,文件里面不仅有HTML代码,也有一些服务器端脚本代码,这样必定使得代码看上去很凌乱。而要在已经看上去很眼花的代码里面加入一个项目很多的表单,必定是一件痛苦的事。
所以我有个想法就是把表单独立出来,放到另一个文件里面,并且这个文件我选择了用XML文件。

首先看看下面这个表单:
form1.gif
整个表单对应如下的一个XML文档:
form2.gif
其中每一个表单项目都对应如下的XML文档:
form3.gif
这里的<item/>表示表单中的一项,其title和description属性说明了项目的标题和描述。
<subItem/>是具体的表单元素,一个<item/>节点可以有多个<subItem/>节点。
表单元素类型由type属性指定,也可以有一些别的相关属性,比如这里的size属性。
其中的validate属性是一个比较特殊也很重要的属性,指名了该表单元素要进行的验证方式,比如这里需要执行3个验证:notEmpty 非空验证,string 字符串验证,server 服务器端验证。
<subItem/>的子节点<param/>指名了验证所需要的一些参数,比如这里的:range 字符串长度范围,format 字符串格式,server 需要在服务器端执行的验证。
如果一个表单元素需要一些额外的描述,还可以给<sumItem/>加上子节点<remark/>。比如上面表单中的Gender项和Validate Code项,对应的XML文档如下:
form4.gif

接下来的任务就是写一个类或是公用的方法,将这个XML文档翻译为合适的HTML代码,然后加入到页面里面就可以了。

为了给用户更好的体验,客户端的验证是必不可少的,所以要先写好验证用的JavaScript代码。当然也不能完全指望客户端,有的朋友会想方设法的绕过客户端的验证直接提交表单,所以在服务器端还需要做同样的验证。
虽然两份验证的工作是一样的,而且如果你嫌麻烦可以去掉客户端的验证。如果在以前,我们需要为每一个表单写一个验证代码(比如注册、登录、发贴等等),这样无疑降低了代码的复用并且产生了冗余。这个时候我们的XML文档就发挥作用了。
我们只用写一个通用的验证框架,然后将表单对应的XML交给这个验证框架,它会自动分析哪些元素需要验证,需要做什么样的验证,然后进行相应的验证。这样不但提高了代码的复用性,而且也使得所有的表单更加的统一,便于管理。

最后,虽然使用外部的XML文件代替表单,其工作量可能远大于直接用HTML代码写,而且每次解析XML文档可能降低效率(这一点倒还可以使用Cache来弥补)。不过将表单独立出来会使得页面代码更为简洁清晰,而且便于管理,统一的风格也使用户更容易接受,另外这个XML的灵活性和强大的自主验证的功能也是很吸引人的,不是吗?

PS. 自己一点学习心得,发表出来供大家参考,如有不好支持还望到此观看的朋友批评指出。

文章转载自【Eternity&#39;s Site】http://www.eternity3.com.cn/blog/article.asp?id=234
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-25 15:22 , Processed in 0.016440 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表