GWT之UiEditor

  1. UiEditor概述
    1.1 什么UiEditor?

    UiEditor是GWT(Google Web Toolkit)所提供的一种框架。

1.1.1 UiEditor有什么用处?

UiEditor是用来在Client和Server中的JavaBean进行数据绑定。比如:在系统的Client端有一个form表单,具有两个TextBox输入框(name和title),在Server端有一个JavaBean,具有两个Fields(name和title)。通过UiEditor框架,可以将这两个属性自动映射到对应的JavaBean中,进行数据的直接存储与查询。

1.1.2 使用UiEditor需要什么?

The Editor framework is meant to perform this work for you by automatically mapping bean fields to, usually, UI elements. It does this by using a driver, known as SimpleBeanEditorDriver, to take defined values from your UI, known as the editor,and synchronize them with a local (on the client) JavaBean。上面解释到,当你要进行属性的自动映射,需要使用SimpleBeanEditorDriver(映射本地JavaBean的情况下)这个接口驱动。
使用UiEditor主要需要四个方面:Domain object(Javabean)、Editor、Editor的子接口、Driver

  1. UiEditor的使用

a) 对象之间的合作

i. The editor需要将Client的数据存储到JavaBean
ii. The editor需要将JavaBean的数据查询并显示在Client端
上述两个操作,是由UiEditor框架的两个接口(SimpleBeanEditorDriver、RequestFactoryEditorDriver)提供的两个方法—flush、edit。
如下图2-1:


图2-1

图中,Editor的数据,通过Driver的子接口(SimpleBeanEditorDriver或RequestFactoryEditorDriver)的Flush方法将数据存储在DomainObejct(JavaBean)中,反之亦然。
b) Example
为了整体的了解UiEditor的使用,我们通过一个例子来解释,见下图:

图2-2

第一步:编写用来存储数据的JavaBean—Employee, 他具有三个Fields(属性)—id、name、title。

图2-3

注:每个属性,必须要有对应的get和set方法,不然无法进行
第二步:使用UiBinder创建Client并进行Editor映射(UiBinder的具体内容请参考UiBinder详解,这里只对涉及到的进行讲述)
EmployeeEditor.java

图2-4

因为我们只是创建一个简单的控件,所以需要继承Composite,此类有一个初始化控件(Widget)的方法initWidget(),同时,必须实现Editor接口,此接口是一个泛型,需要将Javebean绑定为Employee,所以泛型传入Employee。其中声明了一个内部接口EmployeeEditorUiBinder,此接口为实现UiBinder必须有的,具体原因参见UiBinder详解
每一个EmployeeEditorUiBinder接口都对应一个EmployeeEditor.ui.xml配置文件,详细内容参见UiBinder详解。第5行代码中实例化EmployeeEditorUiBinder接口为uiBinder,并通过GWT.create进行延迟绑定。

在EmployEditor类中,我们声明了三个参数,参数类型分别为TextBox、Label。此类型对应的是EmployeeEditor.ui.xml中的类型。@UiField是UiBinder中的注解,用来将.ui.xml的属性与本类中的属性进行绑定。如果我们没有显式的声明@Path,则此类的属性会与Employee.java中的属性名一一对应,前提是此类中的属性名要与JavaBean中的属性名相同,如果不同,则需要加上@Path(value=” ”),其中value为对应的javaBean中的属性。@Ignore注解是忽略映射,就是此id映射到JavaBean中的id。
在构造方法中,通过uiBinder.createAndBindUi()将
.ui.xml绑定成Widget。
EmployeeEditor.ui.xml

图2-5

上述xml文件中,我们声明了一个html页面中的Body标签对应的HTMLPanel类,HTMLPanel类具有诸如FlowPanel等子类。 需要注意的是,第9行代码中ui:field=“name”的意思是引用EmployeeEditor中的属性,他的属性名叫name,类型是TextBox,同时在EmployeeEditor中的name属性需要加上@UiFiled注解,这样xml中的属性就与类中的属性进行了绑定。
第三步:创建图2-1中的Driver-EmployeeView.java。
在该类中,我们创建了三个按钮,用来触发flush、edit和EmployEditor.java中对应的resetValues()方法。
EmployeeView.java

图2-6
续图2-6
续图2-6

现在让我们来解释这样的一个类。
因为我们需要在前台显示三个触发不同事件的button,所以需要继承composite,理由跟EmployEditor一样。
重点在于25行,我们需要声明一个内部接口Driver派生于SimpleBeanEditorDriver,该接口是个泛型,第一个泛型参数为你的JavaBean,第二个泛型参数为你的Editor,通过这样的一个结合,我们整个UiEditor的流程就已经打通。
31行中,我们通过GWT.create()方法实例化Driver接口,之后我们就能调用Driver中的flush和edit方法了。
通过@UiField注解来绑定EmployeeView.ui.xml中的对应的ui:field。在该类的构造方法中,通过调用driver.initialize()和driver.edit()来初始化editor driver和Push the data in an object graph into the Editor given to initialize(E)。
@UiHandler为UiBinder中的注解,@UiHandler(“saveEmployeeButton”)的意思就是给EmployeeView.ui.xml中的ui:field的属性名叫saveEmployeeButton的属性绑定一个事件。事件的属性是该方法传入的参数,本例中传入的参数是ClickEvent,则为点击事件。该方法中的driver.flush(),就是将数据存储到JavaBean中。
EmployeeView.ui.xml

图2-7

第四步:走完前三步,我们要做的基本完成,最后一步就是要运行了,要运行GWT项目,首先得有一个入口,这个入口是需要实现EntryPoint接口,并且实现此接口中的onMoudleLoad()方法。

图2-8

最终效果

图2-9


当点击Save时,会将数据保存到JavaBean,点击Get按钮,就能从JavaBean获取到上一步你Save的信息了。

因为当时是写在word文档里面,好像直接复制的时候会把word的样式也复制过来,然后通过notePad++转换。理解这个需要一些基本的GWT基础知识。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,500评论 0 4
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,617评论 18 399
  • 我慢慢地慢慢地了解到,所谓父女母子一场只不过意味着,你和他的缘份就是今生今世不断地在目送他的背影渐行渐远! 1、母...
    苏小北吖阅读 810评论 0 2
  • 时间管理相信大家都不陌生了,网络上很多这样的课程,也有很多书籍是讲时间管理的。但今天就不详细说为什么要学时间管理和...
    Zi_莫阅读 2,868评论 5 123