首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 ZK 框架的富 Internet 应用程序(4)应用程序小结

使用 ZK 框架的富 Internet 应用程序(4)应用程序小结

应用程序小结本文前面简要介绍了这个客户管理应用程序,它提供以下功能:
  • 支持用户操作的仪表板页面,包含一个所有客户的视图。
  • 添加新客户。
  • 编辑现有客户。
  • 支持客户删除(软删除)。
图 5 展示了应用程序的仪表板页面,默认视图显示数据库中的客户列表。
图 5.                仪表板屏幕仪表板屏幕显示了一个所有已注册客户的列表。在这个客户列表上,用户能够根据 ID 或 Name 进行排序。
index.zul 拥有各种属性,比如 borderlayout、menubar、menu 和 menupopup,这些属性定义应用程序的观感。               
清单 9. index.zul 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<menubar id="menubar" width="800px">
<menu label="Manage Customers">
   <menupopup>
     <menuitem label="Register New Customer">
      <attribute name="onClick"><![CDATA[
        Window win = (Window) Executions.createComponents("addCustomer.zul", null, null);
        win.doModal();
        win.setTitle("Enter Customer Data");
        win.setClosable(true);
        win.setMaximizable(true);
        ]]></attribute>
     </menuitem>
    <menuseparator />
   <menuitem label="Exit" onClick="win.detach()" />
</menupopup>
</menu>
</menubar>




如清单 9 所示,我定义了一个 menubar,菜单标签用于注册新客户。单击这个菜单(onclick)时,通过另一个名为 addCustomer 的 zul,我使用                     Executions 对象实例化一个 Window 对象。我还设置这个属性来创建对话框                    modal、closable 等。另外,我还包含了一个关闭应用程序的退出菜单。这个 menubar,以及这些已定义的属性,给这个应用程序提供了一种富客户端观感。               
清单 10 展示了如何使用一个 listbox 元素来填充这个表格,在 listbox 中,我定义了一个模型,将根据这个模型填充表格元素。
清单 10. 定义表格的样例 listbox 元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<listbox id="customerList" model="@{myList}" mold="paging" pageSize="5"
    multiple="true" width="800px" rows="${custCount}">
  <listhead sizable="true">
    <listheader label="Id" sort="auto(id)"/>
    <listheader label="Name" sort="auto(name)"/>
    <listheader label="Active Date" sort="auto(date)"/>
    <listheader label="Deleted?" />
  </listhead>
    <listitem self="@{each=myList}" onClick="showEdit(self.getLabel())">
      <listcell label="@{myList.id}" />
      <listcell label="@{myList.name}" />
      <listcell label="@{myList.date}" />
      <listcell label="@{myList.deleted}"/>
    </listitem>
</listbox>




分页功能可以使用 listbox 的 mold 属性激活。另外,基于列标题的排序功能可以通过在 listheader 的 sort 属性上启用 auto 来定义。myList 对象是一个 Customer 对象列表,包括以下一些属性:id、                    name、date 以及 Customer 的 deleted flag。服务返回这个列表,然后 ZK 通过 "each =myList" 迭代这个列表。然后,listcell 标签在 listbox 中显示这个 Customer 对象的每个属性。
此外,为了启用编辑功能,我将一个 showEdit 方法附加到 onClick 事件。
Register customer 对话框实现为一个网格,该网格有两个必填值:Customer name 和                Date。
清单 11. Customer 对话框网格代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<grid fixedLayout="true" width="450px">
  <rows>
    <row>
      <label value="Customer Name" />
      <textbox id="customerName" constraint="no empty" />
    </row>
    <row>
      <label value="Date" />
      <datebox id="date" constraint="no empty"/>
      </row>
    <row>
    <button label="Save" onClick="submit()" />
    <button label="Cancel" onClick="addCustomerWin.detach()" />
    </row>
   </rows>
</grid>




对这个对话框的必填约束通过使用 "no empty" 指定为约束属性。ZK 还支持定义自定义约束。
当 Save 按钮被单击时,我将一个 Java 方法 submit() 附加到这个事件。这个 submit() 方法接收用户提供的姓名和日期值,并在一个新创建的 Customer 对象中设置这些值。然后,这个对象被传递到服务以添加到数据库。清单 12 显示了这段代码。            
清单 12. Save 按钮的 Java 代码
1
2
3
4
5
6
7
8
9
10
11
void submit() throws Exception {
     Customer cust = new Customer();
     cust.setName(customerName.getValue());
     java.util.Date utilDate = date.getValue();
     java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
     cust.setDate(sqlDate);
     com.test.services.CustomerService custSvc = new com.test.services.CustomerService();
     custSvc.addCustomer(cust);
     Executions.getCurrent().sendRedirect("index.zul");
     addCustomerWin.detach();
}




图 6. Register                    customer图 7 显示了一个用于编辑客户姓名或日期的屏幕,以及一个                soft delete 选项。
图 7. Edit/Delete                    屏幕编辑机制与设置 Register customer 代码的方式非常相似。您将名称、日期和删除标记的新值传递到更新服务以更新数据库中的记录。如果您想提供其他帮助,您可以使用清单 13 中的代码来创建一个弹出元素。               
清单 13. 弹出元素的代码
1
2
3
4
5
6
7
8
9
10
11
<row>
  <label value="Delete?"/>
    <hbox>
      <checkbox id="deleted" name="deleted" checked="${cust.deleted}"/>
      <label value="whats this?" style="font:9;cursor:help;valign:center"
       popup="help"/>
    </hbox>
    <popup id="help" width="400px">
    <html>Checking this box will enable soft delete of the record.</html>
    </popup>
</row>

返回列表