`
fangang
  • 浏览: 882498 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
311c4c32-b171-3767-b974-d26acf661fb2
谈谈用例模型的那些事儿
浏览量:39000
767c50c5-189c-3525-a93f-5884d146ee78
一次迭代式开发的研究
浏览量:68973
03a3e133-6080-3bc8-a960-9d915ed9eabc
我们应当怎样做需求分析
浏览量:411049
753f3c56-c831-3add-ba41-b3b70d6d913f
重构,是这样干的
浏览量:93994
社区版块
存档分类
最新评论

DWR帮助说明-如何编写通用的单行编辑框

    博客分类:
  • dwr
阅读更多

  也许朋友们会以为这是DWR官方发布的什么帮助,但非常遗憾这不是。现在不少朋友在使用DWR开发项目,我也是其中之一,但苦于关于DWR的帮助文档实在太少,很多问题都不得不自己去钻研DWR的源码才能解决或理解。经过一段时间的苦苦钻研,总结出那么一点点心得,现在从DWR源码实现的角度详细讲解DWR的使用,写出来与大家分享。今天我谈一谈如何编写通用的单行编辑框

当我们需要编辑某行数据的时候,可以将该行的数据设置到一个已经设计好的单行编辑框中进行编辑。在编辑完成以后,点击“保存”按钮,DWR可以采用ajax的方式访问服务器,将数据保存到数据库中。怎样设计一个单行编辑框呢?让我们一步一步来完成吧。

1、设计页面。

设计好一个单行编辑框的页面,为值对象中的每一个属性设计一个数据输入框,如单行文本框、多行编辑框、下拉框、单选框等等。设计这些数据输入框的同时应当将它们的id设置成与值对象对应的属性名相同的名称。这里我想特别说明的是下拉框,因为下拉框中的下拉部分应当是一个从数据库中查出来的下拉列表。DWR为下拉框设计了一个非常便利的函数addOptions(),函数addOptions的完整写法如下
addoptions(eleid, data, valueprop, textprop);
 在该函数中,eleid是下拉框的iddata是下拉框需要显示的下拉列表的数据集,它通常需要包含至少两行数据,一行是下拉框value部分的数据,即需要存数据库的数据,另一行是下拉框text部分的数据,即仅仅用于在下拉列表中显示的数据。比如,我们有一个选择部门的下拉框,value部分对应的应当部门编号,而text部分应当是部门名称。清楚了datavalueproptextprop就好说了,valueprop就是value部分的属性名,textprop就是text部分的属性名。因此,写一个选择部门的下拉框应当这样写:
DepartmentBus.findDepartment(
    function(resultset){    
        addoptions(‘department’,resultset.collection,
            ’departmentId’,’departmentName’);});

  另外一个关键的问题我想特别提一下,就是值对象的主键。我在设计hibernate的值对象的时候倡导的是使用无意义的主键。既然是无意义的主键,那么我们不应当将主键值展示给用户。因此我在设计页面的时候通常是将主键对应的标签设计成一个hidden标签。如果主键标签为空,在提交数据保存的时候,hibernate将执行插入操作;如果不为空,执行的将是更新操作。因此,通常不需要分别设计插入页面和更新页面,可以将它们合二为一(一些因特殊原因必须将插入页面和更新页面拆开来编写的情况应当另当别论)。

2、设计清除函数

如果你需要设计一个添加功能,则需要显示一个没有显示任何值的空单行编辑框。然而使用DWR设计页面,我们的思维需要发生一个转变,那就是不要随便刷新页面。什么意思呢?当你打开一个单行编辑框添加一条数据并保存以后,又需要添加另一条数据。如果不刷新页面,则该页面此时还依然显示的是上一条数据的内容,我们就需要设计一个页面清除函数。如果我们在dwr.xml文件中是一个一个注册值对象,那么写清除函数就非常简单了。具体编辑如下:
var department = new Department();
dwr.util.setValues(department);

 第一行产生一个空值对象,第二行使用setValues()将页面清空。

3、设计编辑函数

当我们在列表显示框中选择了某行并点击“编辑”按钮以后,需要一个编辑函数将该行的数据设置到单行编辑框中。用DWR怎样设计编辑函数呢?前面提到,在列表显示框装载查询结果集的时候,我们同时也将结果集放置到了一个叫objCache页面端数据缓存中。当用户点击“编辑”按钮时,需要将该行的行好以参数的形式传递给编辑函数,然后编辑函数将到objCache中取得该行的值对象,最后使用setValues()将该值对象设置到单行编辑框中。

4、设计保存函数

当编辑数据完成以后,点击“保存”按钮以后,需要执行一个保存函数来执行保存。在设计保存函数的时候,首先需要从页面中取出数据并放置到值对象中。为了完成该功能,DWR提供了getValues()函数。在使用该函数的时候,我们必须写产生一个空值对象,然后将该对象作为参数传递给getValues(),则页面中的数据就植入到了该对象中。最后,使用DWR的特有方式,调用服务器端的java对象中的函数,执行保存。在执行保存的过程这,DWR还专门提供了事务处理的功能,当然我从来没有测试过该事务处理的能力。总结保存函数应当如下编写:
var department = new Department();    
dwr.util.getValues(department);    
dwr.engine.beginBatch();
DepartmentBus.updateDepartment(department);
dwr.engine.endBatch();
objCache[curid] = obj;

 回顾保存函数,我们可以抽象出部分代码,以便简化保存函数的编写并提高代码复用度。代码中的第2356行都可以抽象成一个通用的函数进行编写。而代码中的14行则是个性化的代码,应当在具体编写每个功能的时候分别去实现。也就是说保存函数被我分成了通用函数和具体实现函数两部分,具体的实现见我的示例。

5、设计删除函数

当我们在列表显示框中选择了某行并点击“删除”按钮的时候,我们需要设计一个删除函数来删除该行数据。删除函数的设计与保存函数的设计比较近似,这里我就不再累赘了,朋友们自己思考吧。

示例:一个dwr+spring+hibernate的示例
分享到:
评论
7 楼 fangang 2007-10-13  
Philos 写道
是不是表单域中的属性id的值要和bean中的属性名相同呢?

当然,这样才能建立对应关系。但表单域中并不一定要包含所有bean中的属性。表单没有的属性在提交以后将为空。
6 楼 fangang 2007-10-13  
Philos 写道
var department = new Department();
dwr.util.getValues(department);

将Department注册到dwr.xml中,Department.js中就会包含对Department值对象的定义,因此直接使用new Department()就可以了。在调试页面中保存Department.js就可以查看到里面的内容。但注意,在dwr.xml注册的时候应当采用第二种方法。
5 楼 Philos 2007-10-12  
是不是表单域中的属性id的值要和bean中的属性名相同呢?
4 楼 Philos 2007-10-12  
var department = new Department();
dwr.util.getValues(department);

这样写并没有从页面取值给对象,是如何去到值的呢?
3 楼 fangang 2007-09-07  
kaki 写道
两个地方不明白,请教:

1、如何把页面上各个对象和hibernate对象对应起来??
2、如何使您的框架中的condition?


只要把hibernate的值对象都注册到dwr.xml中,在页面端就直接使用这些对象就行了,和在java中使用基本是一样的。至于hibernate的其它对象,我认为它们应当是对页面端完全隔离的。如果页面端需要某个hibernate可以提供的功能,应当是服务器端的bus和dao层调用hibernate来实现该功能,然后由页面端调用该功能,而不应当是页面端直接调用hibernate。

condition的使用可以看我的源码中的说明,我也正在考虑在示例中展示这个功能的使用,稍候了。
2 楼 kaki 2007-09-07  
两个地方不明白,请教:

1、如何把页面上各个对象和hibernate对象对应起来??
2、如何使您的框架中的condition?
1 楼 fangang 2007-09-05  
终于把示例加进去了

相关推荐

    整理好的DWR-2.0.5-src

    这个不是我的原创,原文件出至这里:...原资源包含了,源代码和API Doc,只是美中不足的是没有整理成可用的zip文档,我这特分离了一下,并重新打好包了,初步测试了一下能用。

    DWR中文文档--简单实用的小型Ajax框架

    - **编辑配置文件**:修改`web.xml`以启用DWR。 - **编写Service**:创建一个简单的Java类作为服务端接口。 - **测试DWR**:通过浏览器访问相应的URL测试服务是否正常工作。 - **编写JSP页面**:在JSP页面中使用...

    dwr-1.1.3-src.zip

    标题 "dwr-1.1.3-src.zip" 指示的是 Direct Web Remoting (DWR) 的源代码版本1.1.3的压缩包。DWR 是一个开源Java库,它允许JavaScript在Web浏览器中与服务器端的Java对象进行交互,实现Ajax功能。描述中的内容同样...

    DWR入门程序---计算输入的两个数之和.rar

    - 在`index.html`中,引入`dwr-engine.js`和`dwr-generate.js`,编写JavaScript函数处理按钮点击事件,调用DWR的`Calculator.add`方法。 - 最后,前端代码接收返回的结果,更新HTML元素显示和值。 5. **实际应用*...

    dwr.jar/dwr-2.0.5-src.zip/dwr.zip

    这可能是一个重复的文件,或者包含了与dwr.jar和dwr-2.0.5-src.zip不同的内容,比如可能是DWR的配置文件、文档或者特定环境的构建版本。通常,这样的zip文件会包含部署所需的全部资源,包括Web应用的结构和配置文件...

    dwr-2.0.5-src.rar

    在解压"Dwr-2.0.5-src.rar"后,你会得到一个名为“dwr-2.0.5-src”的文件夹,这个文件夹中包含了以下关键知识点: 1. **源码结构**:DWR的源代码通常会按照模块进行组织,如核心库、安全模块、测试用例等。通过分析...

    dwr-1.1.1-util.js

    dwr-1.1.1-util.js

    SpringBoot整合DWR3.0.2-RELEASE独立部署示例代码以及修改过的DWR3.0.2-RELEASE资源JAR包

    该示例资源主要解决如下两个问题,其一就是解决SpringBoot集成DWR3.0.2-RELEASE版本,无配置文件快速简洁完成集成工作,省去dwr.xml等DWR框架初始化需要的配置文件;其二就是解决了集成后的SpringBoot项目在开发环境...

    DWR帮助文档-dwr[1].xml文件的配置.doc

    5. 最后,了解DWR的配置不仅可以帮助你更好地利用DWR提供的功能,还能避免不必要的MVC层编程,提高开发效率。通过合理配置`dwr.xml`,你可以实现更灵活、更直接的前端与后端交互,从而构建更高效的Web应用程序。 ...

    DWR使用方法-step by step

    <servlet-name>dwr-invoker</servlet-name> <display-name>DWRServlet</display-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <init-param> <param-name>debug</param-name...

    dwr-2.0.5-src.part1.rar

    传不了太大的,分3份传上来 dwr-2.0.5-src dwr-2.0.5-src

    dwr入门 -- 03 -- 结合Spring

    标题 "dwr入门 -- 03 -- 结合Spring" 指向的是一个关于Direct Web Remoting (DWR)框架如何与Spring框架整合的教程。DWR是一个Java库,允许在浏览器和服务器之间进行实时、双向通信,使得JavaScript可以直接调用Java...

    dwr-2.0-util.js

    dwr-2.0-util.js

    SpringBoot整合DWR-3.0.2-RELEASE,并以 " java -jar XXX.jar" 的方式独立运行

    1. 提供了修改后的DWR-3.0.2-RELEASE源代码工程 `dwr` ① 以maven方式组织DWR源码依赖的jar包 ② 下载了github上的DWR源代码, 对其进行了尽可能少的修改, 使其满足SpringBoot以jar包方式独立运行的需要 源码地址: ...

    dwr-struts-示例

    在"**dwr-struts-示例**"中,我们看到的是一个展示了如何将DWR集成到Struts框架中的实际案例。这个示例主要包含以下几个关键知识点: 1. **DWR的配置**: - 在`dwr.xml`配置文件中,定义允许客户端调用的服务器端...

    dwr-2.0.2-src.zip

    在"DWR-2.0.2-src.zip"这个压缩包中,包含的两个主要文件是: 1. **dwr.jar**:这是DWR的核心库文件,包含了所有必要的类和接口,用于在服务器端运行DWR服务。开发者在项目中引入此jar包,就可以使用DWR提供的API来...

    struts2-dwr-plugin-2.1.6.jar

    struts2-dwr-plugin-2.1.6.jar

    DWR中文文档--方佳玮

    方佳玮编写的DWR中文使用文档是针对开发者的一个宝贵的资源,旨在帮助他们快速理解和应用DWR技术。下面将详细阐述DWR的主要特点、工作原理以及如何使用它来提升Web应用的性能和用户体验。 1. **DWR的基本概念** ...

    struts2-dwr-plugin-2.2.3.jar

    struts2与dwr结合的工具之一,这个是新从官方网站下载的,与大家分享,希望对你们有效。

Global site tag (gtag.js) - Google Analytics