首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

GWT涂鸦(二)——MVP

2012-10-25 
GWT涂鸦(2)——MVPThe module XML file位置:src/com.hellomvp/HelloMVP.gwt.xml内容:模块:helloMVP继承User

GWT涂鸦(2)——MVP
The module XML file位置:src/com.hellomvp/HelloMVP.gwt.xml内容:

模块:helloMVP

继承User
继承Standard theme

继承Activity:Presenter of MVP,依赖于Place模块,本质是一个widget上的事件处理引擎。

继承Place:View States of MVP

entry-point:com.hellomvp.client.HelloMVP

?

replace-with:对com.hellomvp.client.ClientFactory接口采用com.hellomvp.client.ClientFactoryImpl的默认注入

源client
源shared

?

The Host Page位置:war/hellomvp.html内容:标准内容

meta tag
css: hellomvp.css
js: helloMVP/helloMVP.nocache.js

?

?

The Application Style Sheet位置:war/hellomvp.css内容:...

?

The Entry Point Class位置:src/包.client/项目名.java内容:
    private属性:一个最上层组件组件--SimplePanel appWidget,一个初始的ui状态--Place defaultPlace;onModuleLoad():通过GWT建立ClientFactory对象,该工厂是对整个client端一系列对象的创建负责的抽象工厂(Abstract factory pattern),所建对象包括eventBus,placeController,helloView,goodbyeView;ClientFactory接口中暴露了这些client对象的getter,ClientFactoryImpl里实现了对这些对象的new。使用clientFactory对象作为参数,new出一个AppActivityMapper对象。使用activityMapper对象和eventBus对象作为参数,new出一个ActivityManager对象;ActivityManager类是gwt的acitvity模块提供的框架类,它在从事件总线上捕获PlaceChangeEvent或者PlaceChangeRequestEvent后,将根据活动Mapper中提供的place与activity的关系,找到相应的活动来初始化之,并在widget准备好之后调用它的start方法。使用appWidget作为参数调用activityManager的setDisplay方法,该方法将传入的widget作为main widget以及event的接受者。通过GWT建立AppPlaceHistoryMapper对象。使用historyMapper对象作为参数,new出一个PlaceHistoryHandler对象;PlaceHistoryHandler类是gwt的Place模块可提供的框架类,由它来处理浏览器的前进后退以及bookmark等操作。使用placeControler,eventBus,defaultPlace作为参数,调用historyHandler的register方法,该方法初始化整个historyHandler。将appWidget加入到RootPanel中,RootPanel类是gwt的user模块提供的顶层容器类。调用historyHandler的handleCurrentHistory方法,该方法使得app进入初始ui状态,即默认place

?

The MVP Configuration
位置:src/com.hellomvp.client.mvp内容:
    ActivityMapper <|--AppActivityMapper:实现了Activity getActivity(Place place),从而完成从Place到Activity的单向映射配置。PlaceHistoryMapper<|--AppPlaceHistoryMapper: 继承gwt提供的框架接口,该接口定义了从Token到Place的双向映射。继承之后不用实现具体映射方法,可以通过@WithTokenizers来实现映射配置。

The Place
位置:src/com.hellomvp.client.place内容:
    Place<|--GoodbyePlace:包含一个goodbyeName属性以及它的getter方法,属性通常用来保存ui的状态值;一个以String类型的token为参数的构造函数,token通常包含所有属性的值;一个Tokenizer内部类,该类实现了PlaceTokenizer<GoodbyePlace>接口,即实现了从Place到Token的双向映射。该Tokenizer内部类会在AppPlaceHistoryMapper接口中被注册到映射配置中。Place<|--HelloPlace:包含一个helloName属性以及它的getter方法,属性通常用来保存ui的状态值;一个以String类型的token为参数的构造函数,token通常包含所有属性的值;一个Tokenizer内部类,该类实现了PlaceTokenizer<HelloPlace>接口,即实现了从Place到Token的双向映射。该Tokenizer内部类会在AppPlaceHistoryMapper接口中被注册到映射配置中。

The Activity
位置:src/com.hellomvp.client.activity内容:
    AbstractActivity<|--GoodbyeActivity:一个简单的activity,对应的GoodbyeView中不存在需要它实现的presenter,所以它只要负责start时对view的展现,不涉及presenter提供一个由GoodbyePlace和ClientFactory作为参数的构造函数,这样可以从place得到view的当前状态。实现AbstractActivity框架类中声明的start方法,该方法中对GoodbyeView对象会进行一系列操作。AbstractActivity<|--HelloActivity: 同时需要实现HelloView.Presenter接口中定义的业务方法提供一个由HelloPlace和ClientFactory作为参数的构造函数,这样可以从place得到view的当前状态。实现AbstractActivity框架类中声明的start方法,该方法中对HelloView对象会进行一系列操作,包括把this作为presenter参数赋值给helloView.覆盖了AbstractActivity框架类中声明的mayStop方法,增加了在当前activity结束时给出提示的功能。实现HelloView.Presenter接口中定义的goto(Place place)方法。

?

The UI
位置:src/com.hellomvp.client.ui内容:
    GoodbyeView<|--GoodbyeViewImpl:一个简单的view,SimplePanel里包含一个html span,暴露的业务方法(声明在interface里)的实现是为span设置innerText值;HelloView<|--HelloViewImpl: 一个使用Presenter和uibind(通过ann来组装ui)的view,接口里定义了span的设置方法外加presenter的设置方法,以及presenter的接口定义:2个@UiField属性:一个SpanElement和一个Anchor1个绑定到Anchor的@UiHandler方法:调用prensenter.goto方法。HelloViewImpl.ui.xml:一个以ui:UiBinder为root element的xml文件,是对@UiField组件的定义

UI是将View和Presenter进行组合,上述View和Presenter接口都不需要继承gwt的特定接口。GWT涂鸦(二)——MVP

?

?

热点排行