- 浏览: 509100 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (156)
- xml (4)
- web前端 (24)
- jQuery (18)
- java (38)
- SQL (9)
- perl (2)
- OTRS (1)
- GWT (4)
- Linux (32)
- Maven (2)
- Spring (2)
- Oracle Win7 (1)
- css (8)
- eclipse (3)
- mysql (11)
- tomcat (5)
- git (4)
- javascript (22)
- font (1)
- android (1)
- log4j (1)
- email (1)
- sublime plugin (1)
- html (2)
- matches (1)
- php (3)
- apache (3)
- gd (1)
- docker (5)
- rails (1)
- RabbitMQ (1)
- Ubuntu (3)
- L2TP VPN (1)
- nodejs (1)
- oraclejet (1)
- ubutun (1)
- ntp (1)
- ngix (1)
- ssl (1)
- https (1)
- Linux,Debian (2)
- dpkg (1)
- pac (1)
- vi (1)
- vim (1)
- java,http (0)
- httpClient (0)
- shutter (1)
- shell (1)
- redmine (1)
最新评论
-
纵观全局:
配置之后,连接显示不是私密连接
keytool生成证书与Tomcat SSL配置 -
zhuchao_ko:
可以 伪造
java获得ip地址 -
longhua2003:
代码太乱了
java下载文件 -
tomhat:
<div class="quote_title ...
GWT CellTable -
ccx410:
安装gwt报错,unable to retrieve osgi ...
GWT CellTable
package com.cn.client;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.google.gwt.cell.client.CheckboxCell;
import com.google.gwt.cell.client.DateCell;
import com.google.gwt.cell.client.EditTextCell;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.SimplePager;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.AsyncDataProvider;
import com.google.gwt.view.client.DefaultSelectionEventManager;
import com.google.gwt.view.client.HasData;
import com.google.gwt.view.client.MultiSelectionModel;
import com.google.gwt.view.client.ProvidesKey;
import com.google.gwt.view.client.SelectionChangeEvent;
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class CellTableTest implements EntryPoint {
/**
* A simple data type that represents a contact.
*/
private static class Contact {
private String address;
private Date birthday;
private String name;
private String firstName;
private String lastName;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Contact(String firstName, String lastName, Date birthday,
String address) {
this.firstName = firstName;
this.lastName = lastName;
this.name = firstName + " " + lastName;
this.birthday = birthday;
this.address = address;
}
public static final ProvidesKey<Contact> KEY_PROVIDER = new ProvidesKey<Contact>() {
public Object getKey(Contact item) {
return item == null ? null : item.getName();
}
};
}
private Label selectedLabel = new Label();
public void onModuleLoad() {
// Create a CellTable.
final CellTable<Contact> cellTable = new CellTable<Contact>();
// Display n rows in one page
cellTable.setPageSize(10);
cellTable.setWidth("1024px");
// Add a selection model so we can select cells.
final MultiSelectionModel<Contact> selectionModel = new MultiSelectionModel<Contact>(
Contact.KEY_PROVIDER);
cellTable.setSelectionModel(selectionModel,
DefaultSelectionEventManager.<Contact> createCheckboxManager());
selectionModel.addSelectionChangeHandler(
new SelectionChangeEvent.Handler() {
public void onSelectionChange(SelectionChangeEvent event) {
StringBuilder sb = new StringBuilder();
boolean first = true;
List<Contact> selected = new ArrayList<Contact>(selectionModel.getSelectedSet());
for (Contact value : selected) {
if (first) {
first = false;
} else {
sb.append(", ");
}
sb.append(value.getName());
}
selectedLabel.setText("选择:"+sb.toString());
}
});
Column<Contact, Boolean> checkColumn = new Column<Contact, Boolean>(
new CheckboxCell(true, false)) {
@Override
public Boolean getValue(Contact object) {
return selectionModel.isSelected(object);
}
};
cellTable.addColumn(checkColumn, SafeHtmlUtils.fromSafeConstant("<br/>"));
cellTable.setColumnWidth(checkColumn, 10, Unit.PX);
Column<Contact, String> firstNameColumn = new Column<Contact, String>(
new EditTextCell()) {
@Override
public String getValue(Contact object) {
return object.getFirstName();
}
};
cellTable.addColumn(firstNameColumn, "名字");
firstNameColumn.setFieldUpdater(new FieldUpdater<Contact, String>() {
public void update(int index, Contact object, String value) {
// Called when the user changes the value.
object.setFirstName(value);
}
});
cellTable.setColumnWidth(firstNameColumn, 10, Unit.PCT);
Column<Contact, String> lastNameColumn = new Column<Contact, String>(
new EditTextCell()) {
@Override
public String getValue(Contact object) {
return object.getLastName();
}
};
lastNameColumn.setSortable(true);
cellTable.addColumn(lastNameColumn, "姓");
lastNameColumn.setFieldUpdater(new FieldUpdater<Contact, String>() {
public void update(int index, Contact object, String value) {
object.setLastName(value);
}
});
cellTable.setColumnWidth(lastNameColumn, 10, Unit.PCT);
// Add a text column to show the name.
TextColumn<Contact> nameColumn = new TextColumn<Contact>() {
@Override
public String getValue(Contact object) {
return object.getFirstName() + " " + object.getLastName();
}
};
cellTable.addColumn(nameColumn, "全名");
cellTable.setColumnWidth(nameColumn, 20, Unit.PCT);
// Add a date column to show the birthday.
DateCell dateCell = new DateCell();
Column<Contact, Date> dateColumn = new Column<Contact, Date>(dateCell) {
@Override
public Date getValue(Contact object) {
return object.birthday;
}
};
cellTable.addColumn(dateColumn, "生日");
cellTable.setColumnWidth(dateColumn, 40, Unit.PCT);
// Add a text column to show the address.
TextColumn<Contact> addressColumn = new TextColumn<Contact>() {
@Override
public String getValue(Contact object) {
return object.address;
}
};
cellTable.addColumn(addressColumn, "地址");
cellTable.setColumnWidth(addressColumn, 50, Unit.PCT);
// Associate an async data provider to the cellTable
// XXX: Use AsyncCallback in the method onRangeChanged
// to actaully get the data from the server side
AsyncDataProvider<Contact> provider = new AsyncDataProvider<Contact>() {
@Override
protected void onRangeChanged(HasData<Contact> display) {
// int start = display.getVisibleRange().getStart();
// int end = start + display.getVisibleRange().getLength();
// end = end >= CONTACTS.size() ? CONTACTS.size() : end;
// List<Contact> sub = CONTACTS.subList(start, end);
List<Contact> subs = new ArrayList<Contact>();
Contact c1 = new Contact("王", "栋", new Date(), "张家口下花园村");
Contact c2 = new Contact("张", "强", new Date(), "张家港市张家港村");
Contact c3 = new Contact("王", "小鹏", new Date(), "河北省保定市宝莲灯村");
Contact c4 = new Contact("时", "亮", new Date(), "北京市海淀区");
Contact c5 = new Contact("王", "小贺", new Date(), "承德市朝阳区");
Contact c6 = new Contact("李", "东墙", new Date(), "北京市花园村");
Contact c7 = new Contact("赵", "大胆", new Date(), "北京市花园村");
Contact c8 = new Contact("张", "启灵", new Date(), "北京市花园村");
Contact c9 = new Contact("王", "胖子", new Date(), "北京市花园村");
Contact c10 = new Contact("谢", "子扬", new Date(), "北京市昌平区谢家屯");
Contact c11 = new Contact("齐", "殿", new Date(), "北京市海淀区西北旺村");
Contact c12 = new Contact("楚", "穆", new Date(), "北京市亚运村");
Contact c13 = new Contact("冰", "窟窿", new Date(), "北京市奥运村");
subs.add(c1);
subs.add(c2);
subs.add(c3);
subs.add(c4);
subs.add(c5);
subs.add(c6);
subs.add(c7);
subs.add(c8);
subs.add(c9);
subs.add(c10);
subs.add(c11);
subs.add(c12);
subs.add(c13);
updateRowData(0, subs);
}
};
provider.addDataDisplay(cellTable);
// provider.updateRowCount(CONTACTS.size(), true);
SimplePager pager = new SimplePager();
pager.setDisplay(cellTable);
VerticalPanel vp = new VerticalPanel();
HorizontalPanel hp = new HorizontalPanel();
Button cellTableButton = new Button("提交");
cellTableButton.addClickHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
String select = selectedLabel.getText();
Window.alert(select);
/*
String[] selectArray = select.split(",");
if(selectArray!=null && selectArray.length>0){
for(int i=0;i<selectArray.length;i++){
Window.alert(selectArray[i]);
}
}
*/
}
});
hp.add(selectedLabel);
hp.add(cellTableButton);
vp.add(hp);
vp.setCellHorizontalAlignment(hp, HorizontalPanel.ALIGN_RIGHT);
vp.add(cellTable);
vp.add(pager);
vp.setCellHorizontalAlignment(pager, HorizontalPanel.ALIGN_CENTER);
// Add it to the root panel.
RootPanel.get().add(vp);
}
}
你是不是在linux下安装的gwt.如果不是主要原因可能是网速不行。要不直接找那个包先安装了在试试gwt。
我安装2.0.4时一次就通过了。在装2.4时公司就不行。家里网速好就安装好乐。
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.google.gwt.cell.client.CheckboxCell;
import com.google.gwt.cell.client.DateCell;
import com.google.gwt.cell.client.EditTextCell;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.SimplePager;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.AsyncDataProvider;
import com.google.gwt.view.client.DefaultSelectionEventManager;
import com.google.gwt.view.client.HasData;
import com.google.gwt.view.client.MultiSelectionModel;
import com.google.gwt.view.client.ProvidesKey;
import com.google.gwt.view.client.SelectionChangeEvent;
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class CellTableTest implements EntryPoint {
/**
* A simple data type that represents a contact.
*/
private static class Contact {
private String address;
private Date birthday;
private String name;
private String firstName;
private String lastName;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Contact(String firstName, String lastName, Date birthday,
String address) {
this.firstName = firstName;
this.lastName = lastName;
this.name = firstName + " " + lastName;
this.birthday = birthday;
this.address = address;
}
public static final ProvidesKey<Contact> KEY_PROVIDER = new ProvidesKey<Contact>() {
public Object getKey(Contact item) {
return item == null ? null : item.getName();
}
};
}
private Label selectedLabel = new Label();
public void onModuleLoad() {
// Create a CellTable.
final CellTable<Contact> cellTable = new CellTable<Contact>();
// Display n rows in one page
cellTable.setPageSize(10);
cellTable.setWidth("1024px");
// Add a selection model so we can select cells.
final MultiSelectionModel<Contact> selectionModel = new MultiSelectionModel<Contact>(
Contact.KEY_PROVIDER);
cellTable.setSelectionModel(selectionModel,
DefaultSelectionEventManager.<Contact> createCheckboxManager());
selectionModel.addSelectionChangeHandler(
new SelectionChangeEvent.Handler() {
public void onSelectionChange(SelectionChangeEvent event) {
StringBuilder sb = new StringBuilder();
boolean first = true;
List<Contact> selected = new ArrayList<Contact>(selectionModel.getSelectedSet());
for (Contact value : selected) {
if (first) {
first = false;
} else {
sb.append(", ");
}
sb.append(value.getName());
}
selectedLabel.setText("选择:"+sb.toString());
}
});
Column<Contact, Boolean> checkColumn = new Column<Contact, Boolean>(
new CheckboxCell(true, false)) {
@Override
public Boolean getValue(Contact object) {
return selectionModel.isSelected(object);
}
};
cellTable.addColumn(checkColumn, SafeHtmlUtils.fromSafeConstant("<br/>"));
cellTable.setColumnWidth(checkColumn, 10, Unit.PX);
Column<Contact, String> firstNameColumn = new Column<Contact, String>(
new EditTextCell()) {
@Override
public String getValue(Contact object) {
return object.getFirstName();
}
};
cellTable.addColumn(firstNameColumn, "名字");
firstNameColumn.setFieldUpdater(new FieldUpdater<Contact, String>() {
public void update(int index, Contact object, String value) {
// Called when the user changes the value.
object.setFirstName(value);
}
});
cellTable.setColumnWidth(firstNameColumn, 10, Unit.PCT);
Column<Contact, String> lastNameColumn = new Column<Contact, String>(
new EditTextCell()) {
@Override
public String getValue(Contact object) {
return object.getLastName();
}
};
lastNameColumn.setSortable(true);
cellTable.addColumn(lastNameColumn, "姓");
lastNameColumn.setFieldUpdater(new FieldUpdater<Contact, String>() {
public void update(int index, Contact object, String value) {
object.setLastName(value);
}
});
cellTable.setColumnWidth(lastNameColumn, 10, Unit.PCT);
// Add a text column to show the name.
TextColumn<Contact> nameColumn = new TextColumn<Contact>() {
@Override
public String getValue(Contact object) {
return object.getFirstName() + " " + object.getLastName();
}
};
cellTable.addColumn(nameColumn, "全名");
cellTable.setColumnWidth(nameColumn, 20, Unit.PCT);
// Add a date column to show the birthday.
DateCell dateCell = new DateCell();
Column<Contact, Date> dateColumn = new Column<Contact, Date>(dateCell) {
@Override
public Date getValue(Contact object) {
return object.birthday;
}
};
cellTable.addColumn(dateColumn, "生日");
cellTable.setColumnWidth(dateColumn, 40, Unit.PCT);
// Add a text column to show the address.
TextColumn<Contact> addressColumn = new TextColumn<Contact>() {
@Override
public String getValue(Contact object) {
return object.address;
}
};
cellTable.addColumn(addressColumn, "地址");
cellTable.setColumnWidth(addressColumn, 50, Unit.PCT);
// Associate an async data provider to the cellTable
// XXX: Use AsyncCallback in the method onRangeChanged
// to actaully get the data from the server side
AsyncDataProvider<Contact> provider = new AsyncDataProvider<Contact>() {
@Override
protected void onRangeChanged(HasData<Contact> display) {
// int start = display.getVisibleRange().getStart();
// int end = start + display.getVisibleRange().getLength();
// end = end >= CONTACTS.size() ? CONTACTS.size() : end;
// List<Contact> sub = CONTACTS.subList(start, end);
List<Contact> subs = new ArrayList<Contact>();
Contact c1 = new Contact("王", "栋", new Date(), "张家口下花园村");
Contact c2 = new Contact("张", "强", new Date(), "张家港市张家港村");
Contact c3 = new Contact("王", "小鹏", new Date(), "河北省保定市宝莲灯村");
Contact c4 = new Contact("时", "亮", new Date(), "北京市海淀区");
Contact c5 = new Contact("王", "小贺", new Date(), "承德市朝阳区");
Contact c6 = new Contact("李", "东墙", new Date(), "北京市花园村");
Contact c7 = new Contact("赵", "大胆", new Date(), "北京市花园村");
Contact c8 = new Contact("张", "启灵", new Date(), "北京市花园村");
Contact c9 = new Contact("王", "胖子", new Date(), "北京市花园村");
Contact c10 = new Contact("谢", "子扬", new Date(), "北京市昌平区谢家屯");
Contact c11 = new Contact("齐", "殿", new Date(), "北京市海淀区西北旺村");
Contact c12 = new Contact("楚", "穆", new Date(), "北京市亚运村");
Contact c13 = new Contact("冰", "窟窿", new Date(), "北京市奥运村");
subs.add(c1);
subs.add(c2);
subs.add(c3);
subs.add(c4);
subs.add(c5);
subs.add(c6);
subs.add(c7);
subs.add(c8);
subs.add(c9);
subs.add(c10);
subs.add(c11);
subs.add(c12);
subs.add(c13);
updateRowData(0, subs);
}
};
provider.addDataDisplay(cellTable);
// provider.updateRowCount(CONTACTS.size(), true);
SimplePager pager = new SimplePager();
pager.setDisplay(cellTable);
VerticalPanel vp = new VerticalPanel();
HorizontalPanel hp = new HorizontalPanel();
Button cellTableButton = new Button("提交");
cellTableButton.addClickHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
String select = selectedLabel.getText();
Window.alert(select);
/*
String[] selectArray = select.split(",");
if(selectArray!=null && selectArray.length>0){
for(int i=0;i<selectArray.length;i++){
Window.alert(selectArray[i]);
}
}
*/
}
});
hp.add(selectedLabel);
hp.add(cellTableButton);
vp.add(hp);
vp.setCellHorizontalAlignment(hp, HorizontalPanel.ALIGN_RIGHT);
vp.add(cellTable);
vp.add(pager);
vp.setCellHorizontalAlignment(pager, HorizontalPanel.ALIGN_CENTER);
// Add it to the root panel.
RootPanel.get().add(vp);
}
}
评论
2 楼
tomhat
2011-12-30
ccx410 写道
安装gwt报错,unable to retrieve osgi.bundle,com.google.gwt.eclipse.sdkbundle如何解决
你是不是在linux下安装的gwt.如果不是主要原因可能是网速不行。要不直接找那个包先安装了在试试gwt。
我安装2.0.4时一次就通过了。在装2.4时公司就不行。家里网速好就安装好乐。
1 楼
ccx410
2011-12-19
安装gwt报错,unable to retrieve osgi.bundle,com.google.gwt.eclipse.sdkbundle如何解决
发表评论
-
Apache HTTPClient 忽略证书
2019-01-25 15:03 1583/** * httpclient4.5.2版 * ... -
HTTP 返回码
2019-01-24 15:28 423HTTP1.1新增了五种请求方法:OPTIONS、PUT、PA ... -
Java SizeToHuman 大小转换为mb kb tb等
2017-08-21 15:12 1645public class TestSizeToHuman ... -
javascript 监听键盘事件
2017-04-14 10:38 2802var ie; var firefox; ... -
JavaScript从数组中删除指定值元素的方法
2016-10-11 13:13 748下面的代码使用了两种方式删除数组的元素,第一种定义一个单独的函 ... -
CSS几种特效整理
2016-04-19 09:55 535css用伪类before和after制作三角形箭头网上有一堆教 ... -
java常规格式化说明
2016-01-20 17:27 1381转 换 符说 明 ... -
java验证是否包含特殊字符/\:*?"<>
2016-01-05 15:25 8762public class MatchTest { ... -
js 一些知识,js获取contxtPath
2015-11-12 13:49 1205var num = 1; var str = '1'; ... -
IE指定文档模式
2015-10-15 15:21 1010对于 Web 开发人员来说,文本兼容性是一个要考虑的重要问题。 ... -
JSP和JSTL获取服务器参数
2015-09-11 13:57 1195<%@ page language="java ... -
java计算时间差比较时间大小
2015-05-20 10:53 1115今天需要比较时间在网上找到然后写下: 比如:现在是:200 ... -
java发邮件
2014-11-19 15:37 1220一、 import java.util.Date; im ... -
java log4j.properties
2014-11-18 09:30 916log4j.properties配置文件如下: log4j ... -
java获得ip地址
2014-11-17 18:18 1327public String getIpAddr(Htt ... -
java下载文件
2014-11-07 10:57 1095// 文件名称中文乱码new String(filename. ... -
Android中RelativeLayout各个属性的含义
2014-10-11 15:06 872android:layout_above="@id ... -
Http发送请求
2014-09-17 15:01 898package wzh.Http; import j ... -
如何在一个页面上让多个jQuery版本共存
2014-09-10 10:22 914如何在一个页面上让多个jQuery共存呢?比如jquery-1 ... -
导出数据到excel
2014-09-03 16:20 1218/** * */ package com.chin ...
相关推荐
4. **数据绑定**:将数据源与表格关联,可以使用GWT的`CellTable`或者`FlexTable`,并利用`DataProvider`进行数据绑定。 5. **定义列**:为表格添加列,设置列的标题、宽度、数据类型,并实现自定义的列渲染器。 6...
`GWT-Advanced-Table-shell.cmd`和`GWT-Advanced-Table-compile.cmd`是批处理命令文件,分别用于启动GWT的开发模式(Shell模式)和编译GWT应用。开发模式允许开发者在浏览器中实时查看代码更改的效果,而编译模式则...
2. **GWT UI组件**:学习如何使用GWT的Widget库,如CellTable或FlexTable,创建高级表格。 3. **事件处理**:如何添加事件监听器到表格单元格,实现点击、双击等交互。 4. **数据绑定**:可能涉及使用GWT的...
GWT的Cell Widgets和CellTable允许你创建高度可定制的列表或表格,它们以数据驱动,可以高效渲染大量数据。 **5. Deferred Binding** GWT的Deferred Binding可以根据不同的浏览器或配置生成不同的代码,实现更好的...
GWT提供了`DataGrid`或`CellTable`组件,它们可以绑定数据源并显示数据。这些组件支持分页、排序和过滤等功能,使得数据浏览更加灵活。同时,`AsyncCallback`可以用于异步加载数据,确保用户体验流畅。 3. **更新...
这可能涉及到GWT中的`CellTable`或`FlexTable`组件,这些组件可以方便地构建和定制表格,包括列的定义、排序、过滤等功能。同时,数据的加载可能通过GWT的`RequestFactory`或`RPC`服务实现,这些服务允许客户端与...
- GWT的`DataGrid`和`CellTable`支持通过`CellList`或`CellTree`等数据展示控件与后台数据模型绑定,实现数据的自动更新和异步加载。 - 可以使用`AsyncDataProvider`与服务接口(`GWT-RPC`, `REST`, `JSON`)配合,...
3. **用户界面(UI)构建**:掌握GWT提供的各种UI组件,如TextBox、Button、CellTable等,以及如何使用布局管理器构建复杂的用户界面。 4. **事件处理和数据绑定**:学习GWT中的事件模型,以及如何使用数据绑定技术...
CellPanel通常与Cell库一起使用,如TreeCell、TableCell等。 3. **HorizontalPanel** HorizontalPanel 将其子组件水平排列。它是实现水平布局的简单方法,每个子组件之间的间距可以通过设置间距属性进行调整。...
项目可能使用`CellTable`或`FlexTable`展示航班信息,`VerticalPanel`或`FlowPanel`组织布局。 - **Model-View-Presenter (MVP)模式**: MVP是GWT推荐的架构模式,其中Model负责数据存储,View负责UI展示,...
2. **Cell-based UI**:GWT的Cell库允许开发者创建可重用的数据绑定组件,例如,CellTable或DataGrid可以用来展示电影列表。 四、数据模型与服务 1. **Entity Beans**:MovieCollection可能使用了GWT的持久化框架...