技术开发 频道

ZK5.0客户端与服务器端结合的编程方式

  【IT168 技术文档】简介

  从ZK 5开始,开发者不仅能(继续)享受使用服务器为中心的便利开发方式,而且还能使用客户端编程进行全面的控制。二者可以按需选择。这篇文章中将为您分别演示使用服务器为中心的模式和客户端/服务器混合模式来编写一个真实的应用。

  应用: ZK Finance(ZK 财经)

  ZK finance 是一个真实的应用,用户可以查找一个股票的历史价格,并通过一个表格和图表来显示结果。下面是一个界面图,在左面板上有一个搜索框,右边是显示结果的表格和图表。

  纯粹的服务器处理方式

  首先我们使用服务器端编程来实现这个应用,我们使用MVC (Model-View-Controller) 模式。

  模型

  这里有两个对象——股票和价格。它们是一对多的关系,一支股票有多个历史价格。

  Stock.java

  Java代码

public class Stock {  
  
  
    
private int _id;  
  
  
    
private String _name;  
  
  
    
private List _priceItems = new ArrayList();  
  
  
....  
  
  
getter and setter methods  
  
  
}  

  Price.java

  Java代码

 public class Price {

  
private String _date;

  
private double _open;

  
private double _high;

  
private double _low;

  
private double _close;

  
private int _volumn;

  ....

  getter and setter methods

  }

  然后我们创建一个DAO对象来负责提供股票数据,StockDAO.java

  Java代码

public class StockDAO {

  
private List stocks = new LinkedList();

  
public Stock getStock(int id) {}

  
public List findAll() {}

  }

  View

  提供一个搜索功能在listbox中显示搜索的结果

  index.zul

  Xml代码

<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit"?>  
<borderlayout id="main" apply="StockController">  
    
<west title="ZK Finance" size="250px" flex="true"  
        splittable
="true" minsize="210" maxsize="500" collapsible="true">  
        
<panel>  
            
<toolbar>  
                
<label value="Search:" />  
                
<textbox id="searchBox" ctrlKeys="#down#up"  
                    focus
="true" sclass="demo-search-inp" />  
            
</toolbar>  
            
<panelchildren>  
                
<listbox id="itemList" model="@{main$composer.stocks}"  
                    fixedLayout
="true" vflex="true">                                  
                    
<listitem self="@{each='stock'}" value="@{stock}">  

                        
<listcell label="@{stock.name}" />  
                    
</listitem>  
                
</listbox>  
            
</panelchildren>  
        
</panel>  
    
</west>  
    
<center>  
        
<include id="detail"/>  
    
</center>    
</borderlayout>  

  我们使用一个数据表格和图表来显示价格

  price.zul

  Xml代码 

<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit"?>  
<window id="main2" apply="PriceController">  
    
<grid id="history" model="@{main2$PriceController.prices}" >  
        
<columns menupopup="auto">  
            
<column label="Date" />  
            
<column label="Open" />  
            
<column label="High" />  
            
<column label="Low" />  
            
<column label="Close" />  
            
<column label="Volumn" />  
        
</columns>  
        
<rows>  
            
<row self="@{each='price'}">  
                
<label value="@{price.date}"/>  
                
<label value="@{price.open}"/>  
                
<label value="@{price.high}"/>  
                
<label value="@{price.low}"/>  
                
<label value="@{price.close}"/>  
                
<label value="@{price.volumn}"/>  
            
</row>  
        
</rows>  
    
</grid>  
    
<chart id="line" width="500" height="250" type="line"  
        fgAlpha
="128" model="@{main2$PriceController.cateModel}"/>  
</window>  

 Controller

0
相关文章