53dwr - 购物车案例(实现目录)

简介: 53dwr - 购物车案例(实现目录)

DWR 应用程序的起点是编写服务器端对象模型。在这个示例中,我从编写 DAO 开始,用它提供对产品目录数据存储的搜索功能。CatalogDAO.java 是一个简单的无状态的类,有一个无参数的构造函数。清单1 显示了我想要公开给 Ajax 客户的 Java 方法的签名。

清单 1. 通过 DWR 公开的 CatalogDAO 方法

接下来,我需要配置 DWR,告诉它 Ajax 客户应当能够构建 CatalogDAO 并调用这些方法。我在清单 2 所示的 dwr.xml 配置文件中做这些事:

清单 2. 公开 CatalogDAO 方法的配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 
2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
  <allow>
    <create creator="new" javascript="catalog">
        <param name="class" value="developerworks.ajax.store.CatalogDAO" />
        <include method="getItem" />
        <include method="findItems" />
    </create>
    <convert converter="bean" match="developerworks.ajax.store.Item">
        <param name="include" value="id,name,description,formattedPrice" />
     </convert>
    </allow>
 </dwr>

dwr.xml 文档的根元素是 dwr。在这个元素内是 allow 元素,它指定 DWR 进行远程的类。allow 的两个子元素是 create 和 convert。

create 元素

create 元素告诉 DWR 应当公开给 Ajax 请求的服务器端类,并定义 DWR 应当如何获得要进行远程的类的实例。这里的 creator 属性被设置为值 new,这意味着 DWR 应当调用类的默认构造函数来获得实例。其他的可能有:通过代码段用 Bean 脚本框架(Bean Scripting Framework,BSF)创建实例,或者通过与 IOC 容器 Spring 进行集成来获得实例。默认情况下,到 DWR 的 Ajax 请求会调用 creator,实例化的对象处于页面范围内,因此请求完成之后就不再可用。在无状态的 CatalogDAO 情况下,这样很好。

create 的 javascript 属性指定从 JavaScript 代码访问对象时使用的名称。嵌套在 create 元素内的param 元素指定 creator 要创建的 Java 类。最后,include 元素指定应当公开的方法的名称。显式地说明要公开的方法是避免偶然间允许访问有害功能的良好实践 —— 如果漏了这个元素,类的所有方法都公开给远程调用。反过来,可以用 exclude 元素指定那些想防止被访问的方法。

convert 元素

creator 负责公开用于 Web 远程的类和类的方法,convertor 则负责这些方法的参数和返回类型。convert 元素的作用是告诉 DWR 在服务器端 Java 对象表示和序列化的 JavaScript 之间如何转换数据类型。

DWR 自动地在 Java 和 JavaScript 表示之间调整简单数据类型。这些类型包括 Java 原生类型和它们各自的类表示,还有 String、Date、数组和集合类型。DWR 也能把 JavaBean 转换成 JavaScript 表示但是出于安全性的原因,做这件事要求显式的配置。

清单 2 中的 convert 元素告诉 DWR 用自己基于反射的 bean 转换器处理 CatalogDAO 的公开方法返回的 Item,并指定序列化中应当包含 Item 的哪个成员。成员的指定采用 JavaBean 命名规范,所以DWR 会调用对应的 get 方法。在这个示例中,我去掉了数字的 price 字段,而是包含了 formattedPrice 字段,它采用货币格式进行显示。

目录
相关文章
|
存储 测试技术
52dwr - 购物车案例(介绍)
52dwr - 购物车案例(介绍)
33 0
|
6月前
|
前端开发
支付系统--微信支付21--搭建前端环境,payment-demo-front这个项目文件夹是前端显示文件,payment-demo是后端项目,支付页面常见三个页面:购买课程,我的订单,下载账单
支付系统--微信支付21--搭建前端环境,payment-demo-front这个项目文件夹是前端显示文件,payment-demo是后端项目,支付页面常见三个页面:购买课程,我的订单,下载账单
|
8月前
mallocstacklogging和MallocStackLoggingNoCompact引起的app文稿数据快速增加
mallocstacklogging和MallocStackLoggingNoCompact引起的app文稿数据快速增加
66 0
|
8月前
|
存储 JavaScript 前端开发
JS清空购物车后再次添加商品添加不上
JS清空购物车后再次添加商品添加不上
|
Java API
Java实现企业微信上传临时文件获取media_id
Java实现企业微信上传临时文件获取media_id
801 0
|
安全 Linux 数据安全/隐私保护
如何通过 appuploader 把 ipa 文件上传到 App Store 教程步骤​
iOS APP 上架 App Store 其中一个步骤就是要把 ipa 文件上传到 App Store!​ 下面进行步骤介绍!​ 利用 Appuploader 这个软件,可以在 Windows、Linux 或 Mac 系统中申请 ios 和上传 IPA 到 App Store Connect。​
MacBook中如何删除.DS_Store文件?
MacBook中如何删除.DS_Store文件?
|
PHP
tp6 控制器不存在:app\index\controller\Index多项目目录路由
tp6 控制器不存在:app\index\controller\Index多项目目录路由
626 0
|
JavaScript
vue再读22-表格案例--删除商品
vue再读22-表格案例--删除商品
86 0
vue再读22-表格案例--删除商品
|
API Go 数据库
【Go实战 | 电商平台】(6) 用户信息修改
文章目录 写在前面 1. 路由注册 2. 函数编写 2.1 service层 2.2 api层 3. 服务编写 4. 验证
191 0
【Go实战 | 电商平台】(6) 用户信息修改