wmframework成长日记(二)——v1.0jsp请求数据处理

         这篇文章,在草稿箱里沉积了好久,一直说要把它写完,可老是被其他事情给占用。我现在的休息时间就是漫天涂鸦,已经好久没去整理wmframework了,感觉自己都有点对它陌生了。今天发现刚好草稿箱里就剩下这个,那就把它写完吧。
        这里我主要介绍wmframework的1.0版本关于jsp请求数据处理,这个版本被运用在我做一个校务管理系统的时候,大体的处理流程和(一)中介绍那样,有兴趣可以回头看看。wmframework v1.0整个版本的完善经历了2年半左右的时间。当然这更多得益于项目组最终确定采用这个技术框架,有了更多的人使用,自然暴露的问题就逐渐增多。为了满足通用与灵活多样的特性,解决了各种自己原先没考虑的需求,这中间我做了很多大大小小的修改完善。整个项目结束,最终1.0版本已就稳定下来了。
        我先说下wmframework 提倡什么,它主要倡导的就是开发的分层性,这个你可以在我的《用WM framework进行MVC团队组合模式的系统开发》找到答案。就单个模块或功能点的开发而言,wmframework提出,多个jsp页面请求公用一个action相应,一个service外部接口和一个dao完成处理,所以使用wmframework,常规下开发人员没必要也不允许进行action、service、dao的编写,因为wmframework自带的公用定义已经完成了你的操作。不说别的光这点上就可以节省多少不必要的资源开销,最终可以直接有效地降低开发人员的工作量,何乐而不为呢?
         wmframework 主要是依托于ajax数据提交模式下运作的,在1.0中主要是以同步请求提交为主,下面我具体来说说前后台jsp请求数据处理。
1.前台数据封装
        使用wmframework 要求开发人员在jsp中除了使用html标签,部分jstl及自定义标签外,一般不提倡使用类似struts或spring自带的mvc标签,因为这些标签本身就是一个javabean,如果用的过多,那必然增加jsp的页面负载和请求加载速度,如直接使用html标签,至少可以减少那些mvc标签的解析过程。下面我给出一个jsp中一个表单元素的写法:

<input type="text"  issave="true" fieldname="userAccount" require="true" datatype="chars"

showmessage="用户账号为空或设置错误" maxlength="20" class="textfile" id='unit_account'/>

 

 

这里wmframework 扩展了html标签,增加了几个自定义的属性。issave="true"表明当前表单元素是必须提交到后台进行操作的;fieldname是匹配当前表单提交匹配domain(或pojo)的中某个属性的名称;require表明当前字段是否必填;datatype标识当前元素需要填入的数据类型,这里chars代表需要字符型;showmessage表示如当前表单元素校验不通过;需要给出的提示信息。当然不光是input可以这样定义,只要html支持的页面标签如select,textarea,image,div,tr,td等等都可以进行这些属性的定义,这里就不一一罗列了。

 

2.前台数据校验
        页面元素定义完,接下来就是表单提交数据前,前台js校验问题了,这里wmframework 通过自定义的js对象WMvalidate完成,一般情况下不提倡直接调用WMvalidate中的方法,因为WMvalidate在被调用完成数据校验的同时,其他对象在完成这些表单数据的装载。
3.前台数据提交
对于当前jsp表单数据的校验与装载过程,主要在前台js的入口对象WMaction中完成,所以一般页面中主要以调用WMaction为主。下面我给出jsp调用WMaction对象的一个实例,进行简单说明:
这是一个提交按钮触发的onclick事件处理函数
function dosave() {
  var ac = new action(); //创建js对象请求action对象
  ac.setForm(document.forms[0]); //设置本次提交表单数据所处的form对象,当一个页面存在太多元素或form是,可以有效地减少没必要的页面元素遍列
  ac.setUrl(cps+'/userAction.do?action=add'); //设置本次提交的路径url, cps为公共文件中定义的全局变量,var cps = "<%=request.getContextPath()%>";即当前上下文的js引用。
  ac.setTextDiv('textdiv'); //设置本次提交,需要隐藏按钮所在的div的ID值。数据提交后,当前操作按钮将被隐藏,避免用户进行二次点击操作
  ac.setHitDiv('hitDiv'); //设置异步提交时,进度条所在的div的ID值。数据处理过程中,提交按钮将被隐藏,同时在相同位置将显示一个进度条标识当前请求处理的进度
  ac.setIsasy(true); //设置本次提交的操作方式:true 异步方式,即当前提交无需等待response的响应,可完成类似cpu多线程同时处理的方式, false 同步方式即当前请求提交后,必须等待response的响应,这好比数据库中的排它锁,一时仅能保证一个请求的处理。
  ac.setFunctionname("insertUser"); //设置本次提交执行的sqlmap配置文件中的xml节点方法的id值,对大小写敏感,如果你了解ibatis,应该知道这里指的东西。
  ac.setDomainname("OaUser"); //设置本次提交数据封装对象名称(和后台domain一致,不用加类全路径,加已无所谓)对大小写敏感,后台自带完成当前domain对象的全路径添加匹配,这就要求,整个系统的domain存放在固定的package ,当然你实在不愿意,那就直接加上当前domain的这个包路径,如   ac.setDomainname("com.test.OaUser");
  ac.execute(); //发送数据请求,因为这里仅考虑的是进行简单的保存或删除操作,所以没有添加回调函数的处理
}
        如果你感觉前面的定义过于繁琐难记,那可以使用第二种方式,直接获得数据表单居于xml格式封装的字符串,前面忘记说一点,wmframework 所有数据请求都是通过xml格式封装并通过ajax发出的,这点我在(一)中已经进行了相关介绍说明。
给出一个定义的参考
function dosave() {
  var ac = new action(); //创建js对象请求action对象
  ac.setForm(document.forms[0]);/ /设置本次提交表单数据所处的form对象,这里必须设置,不然WMvalidate没法子帮你进行数据校验
  ac.setUrl(cps+'/userAction.do?action=add') ;//同上
  ac.setTextDiv('textdiv'); //同上
  ac.setHitDiv('hitDiv') ;//同上
  ac.setIsasy(true); //设置本次提交的操作方式:true 异步方式 false 同步方式
  var xmlStr = " <?xml version=/"1.0/" encoding=/"UTF-8/"?>"
                +" <root>"
                +" <vos id="OaUser"> "
                  +" <vo> "
                +" <userName>测试用户</userName> "
                +" <userAccount>demo</userAccount> "
                  +" <password>123</password> "
                +" <userType>1</userType> "
                  +" <departmentId>1</departmentId> "
                +" <function>insertUser</function>"
                +" </vo> "
                  +" </vos> "
                  +" </root> ";
   ac.setXmlstr(xmlStr) ;//设置请求数据xml字符串
  ac.execute() ;//同上
}
        就这样简单的进行设置,就可以完成当前jsp页面表单数据的提交保存操作,当然这里的设置过于简单,其实在这里你还可以定义回调函数,操作失败处理函数,操作成功处理函数,调试跟踪器等,但在v1.o中这样的定义仅支持在本次操作为同步提交的模式。即ac.setIsasy(false)。
        WMaction.execute()执行后,会先调用WMvalidate进行数据校验,当然你也可以不进行校验,那就别设置上面的form参数,不过方式仅支持数据采用第二种提交;WMvalidate校验通过,则判断当前用户使用哪种方式转载数据;如第一种,则调用WMdataemun对象完成提交数据表单的枚举类型封装(在v2.0中这个对象已经被废弃),即把表单数据转载在一个js定义的枚举对象中,以进行统一的xml字符串拼接读取,这个过程在WMdocobject完成;如用户采用第二种定义方式,那就不经过上述两个对象的流转,直接到WMservice对象中,在WMservice中最终构建XMLHttpRequest对象,并通过send方法把数据发送出去。
下面给出主要的流程,供参考:
wmframework v1.0jsp请求数据处理
  至此jsp前台请求处理宣告介绍,先写到这里吧,下次再继续,太多了看的人眼花,变成消化不良了不太好。。。
(注:本人文章均为原创,转载请注明出处!20100616写于深圳。)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值