逻辑删除而不是物理删除,是很常见的需求。我这里是因为要用到 syncml,
所以删掉的联系人也不能真正删除,只能做标记。于是增加一个 status 字段,
如果是 "D"的话,就表示删除。
对于 SmartGWTEE 来说,只要在 datasource 里面定义好了,增删改查
都不用我做。那么,如何用最简单的办法做一个逻辑上的删除?
首先,肯定要自己自定义一个服务端的 DataSource。在 ds.xml 文件当中,
增加这个类的定义:
<DataSource
ID="contactPerson"
serverType="hibernate"
beanClassName="org.simon.pim8.server.contact.ContactPerson"
serverConstructor="org.simon.pim8.server.contact.ContactPersonDataSource"
>
这里的 serverConstructor 就是自定义的DataSource。
接下来这个DataSource要做的事情,就是从HibernateDataSource 当中继承下来,做一些调整就OK了。
public class ContactPersonDataSource extends HibernateDataSource {
@Override
public DSResponse execute(DSRequest req) throws Exception {
String operationType = req.getOperationType();
Map values = req.getValues();
if ( isUpdate( operationType)) {
values.put( "status", "U");
} else if ( isAdd( operationType)) {
values.put( "status", "N");
} else if ( isRemove( operationType)) {
// 不做真实的删除
values.put( "status", "D");
final Session session = sessionFactory.openSession();
final ContactPerson person = (ContactPerson) session.get( ContactPerson.class, (Serializable) values.get( "id"));
person.setStatus( "D");
final Transaction txn = session.beginTransaction();
session.update( person);
txn.commit();
session.close();
return new DSResponse();
} else if ( isFetch( operationType)) {
Map newCriteria = new HashMap();
newCriteria.put( "_constructor", "AdvancedCriteria");
newCriteria.put( "operator", "and");
List criterias = new ArrayList();
Map notDelete = new HashMap();
notDelete.put( "fieldName", "status");
notDelete.put( "operator", "notEqual");
notDelete.put( "value", "D");
criterias.add( notDelete);
if ( isAdvancedCriteria( req.getCriteria())) {
criterias.add( req.getCriteria());
}
newCriteria.put( "criteria", criterias);
req.setCriteria( newCriteria);
}
return super.execute( req);
}
}
这里,除了删除之外,实际上的工作都由父类完成,我只是做一些设置,改变父类的行为。
增加和新增不用多说。删除的话,设置状态,然后手工更新,就可以直接退出了。
本来想把 operationType设置为 update的。后来想还是算了,简单点好。
查询是最有意思的。因为要增加一个不等于"D"的criteria,所以只能按照 SmartGWTEE的
AdvancedCriteria格式,来做这样一个动作。
另外,提醒一下,status这个字段,也要添加到 ds.xml 文件当中,否则在过滤时,不会起作用的。
分享到:
相关推荐
SmartGWT是一个强大的Java框架,用于构建富互联网应用程序(RIA)。这个官方实例是学习和理解SmartGWT功能和用法的宝贵资源,尤其适合自学者。"Showcase"通常指的是一个展示各种组件、特性和功能的集合,让我们深入...
SmartGwt是一款强大的Java库,专门用于构建富互联网应用程序(RIA,Rich Internet Applications)。它基于Google的GWT(Google Web Toolkit)框架,并扩展了其功能,提供了丰富的UI组件和更高级的客户端性能优化。...
首先,SmartGWT的核心特性之一是其丰富的组件集。这些组件包括但不限于表格、树、表单、面板、图表以及各种自定义小部件。它们都经过精心设计,具有丰富的样式和配置选项,可以轻松满足多种设计需求。例如,`...
SmartGWT是一个强大的Java库,专门用于构建富互联网应用程序(RIA)。这个名为"smartgwt-1.3"的压缩包文件很可能包含了SmartGWT框架的1.3版本的源代码、库文件和其他相关资源。SmartGWT是基于Google Web Toolkit ...
在本篇文章中,我们将深入探讨SmartGWT 3.1的关键特性、API使用、源码解析以及Sample示例。 1. **SmartGWT框架概述** SmartGWT是一个基于Google Web Toolkit (GWT) 的扩展框架,它通过提供大量预定义的用户界面...
2. src/main/java:源代码目录,包含用Java编写的业务逻辑和SmartGWT的客户端代码。 3. src/main/resources:资源文件夹,可能包含一些静态资源,如图片、样式表或本地化文件。 4. src/main/webapp:Web应用目录,...
SmartGWT的组件使用XML布局定义,配合Java后台逻辑,可以实现复杂的交互和数据展示。例如,你可以创建一个`ListGrid`组件来显示数据,使用`FormItem`来收集用户输入,通过`Button`触发事件处理。 为了运行和测试...
SmartGWT的一大亮点是它的Showcase演示,这是一个包含大量预构建示例的项目,展示了各种UI组件的用法和效果。开发者可以通过这些示例学习如何使用SmartGWT的各种组件,如表格、树形视图、图表、表单等,以及如何进行...
SmartGWT库的核心在于它将Google Web Toolkit (GWT) 的优势与智能组件模型相结合,为开发者提供了丰富的UI组件、强大的数据管理工具以及高效的异步通信机制。 1. **SmartGWT 框架** SmartGWT 是基于GWT的扩展,它...
SmartGWT 2.4 是一个强大的开源框架,主要用于构建企业级的富互联网应用程序(Rich Internet Applications,简称RIA)。这个框架基于Google Web Toolkit (GWT) 并且扩展了其功能,提供了丰富的组件库和高级特性,...
这个解决方案的核心在于理解SmartGWT的事件处理机制和组件内部的工作原理,以及如何通过JavaScript Native Interface(JNI)来直接操作底层的JavaScript对象。这种方法虽然能够解决问题,但可能会影响到SmartGWT的...
在这个项目中,Spring可能被用来管理SmartGWT和Hibernate的生命周期,以及处理HTTP请求和业务逻辑。 Hibernate作为ORM框架,负责将Java对象映射到数据库表。它简化了数据库操作,使得开发者可以像操作普通Java对象...
"SmartGWT"是一个强大的Java库,用于构建企业级的Web应用程序。它基于Google Web Toolkit (GWT) 并提供了一系列高级组件和功能,旨在简化开发过程,提高开发效率。SmartGWT尤其适合那些需要创建数据密集型、交互性强...
这篇内容将深入探讨 SmartGwt 的原生 Desktop 实现,以及如何利用这一特性来提升 Web 应用的用户体验。 首先,我们理解 SmartGwt 的 Desktop 特性。Desktop 提供了一种布局方式,它模仿了传统桌面应用程序的界面...
### SmartGWT 入门详解 #### 一、SmartGWT 概述 **SmartGWT** 是一款基于 **Google Web Toolkit (GWT)** 的高级Web应用开发框架,旨在简化企业级Web 2.0应用的开发过程。自从 **GWT** 发布以来,它吸引了大量的...
SmartGWT 是封装了 SmartClient 的 GWT API。SmartGWT 有如下特色: 丰富的控件。很多较为复杂的常用界面都被包装成简单易用的控件。比如可 编辑的树形表格、查询常用的过滤器创建器和类似 Google Calendar 的日历...
SmartGWT 是封装了 SmartClient 的 GWT API。而 SmartClient 是一个开源的企业级 Ajax 开发框架。 Google Web Toolkit 的发布,大大降低了 Java 开发人员进行 Web 开发的门槛。然而 GWT 本身提供的控件及功能相对...
### SmartGWT 快速开发文档 (Quick Start Guide) 关键知识点详解 #### 一、文档概述 **SmartGWT** 是一款强大的基于 Java 的 Web 应用前端框架,它支持构建高性能的企业级应用程序。本快速开发文档为 SmartGwtEE ...
有关于smartgwt 开发的ppt,高级开发的应用。
1. **组件使用**:SmartGWT中的组件如Grid(表格)、Form(表单)、Tree(树形结构)、Dialog(对话框)等,都有详细的示例展示。开发者可以通过这些例子了解如何创建、配置和操作这些组件。 2. **数据绑定**:...