DataSet與DataType

(1)DataSet與DataType作用

     DataType定義了資料格式,相當於類

     DataSet中儲存了多個指定DataType的資料,相當於儲存了多個類例項的集合

(2)Model檔案

     就是為了儲存DataType

     分為2種:

     1)定義在View的Model節點中

         這種其中定義的dataType是view私有的,只能在這個view中使用

     2)定義在Model配置檔案中

         這種其中定義的dataType是全域性共享的,dorado在啟動的時候會先讀取Model檔案,並初始化這些DataType資訊

         但是注意,必須要保證通過configure.propertis和configure-debug.properties中的model.root能夠找到Model檔案

     所以我們當前可以建立models,用來儲存所有的models檔案

                     

(3)建立model.xml檔案

           1)定義DataType,並制定name和matchType

               其中matchType是我們定義好的pojo:Product

    其中Product定義為:

public class Product {
private long id;
private String name;
private double price;
private Date gmtCreate;
private Date gmtModifieDate;
.......
}

           2)再生成PropertyDefs

              實際上也就是用pojo中的各個屬性生成DataType中的各個屬性

              在DataType上右鍵->通過簡單java物件自動建立PropertyDefs

            
           至此,DataType已經定義完畢,可以在後面使用了

          

(4)建立DataProvider

           實際上就是用來給DataSet提供資料的方法

           1)定義一個SimpleCURD類,用來編寫DataProvider方法

package sample.dataset;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.bstek.dorado.annotation.DataProvider;
@Component
public class SimpleCURD {
@Autowired
private ProductDAO productDAO;
@DataProvider
public List<Product> getAll(){
return productDAO.getData();
}
}

           2)定義一個ProductDAO類,用來提供資料

              這裡我們模擬持久層,直接返回資料即可

package sample.dataset;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.stereotype.Component;
@Component
public class ProductDAO {
public List<Product> getData() {
List<Product> list = new ArrayList<>();
for (int i = 0; i < 5; i  ) {
Product product = new Product();
product.setId(i);
product.setName(i "pro");
product.setPrice(i);
product.setGmtCreate(new Date());
product.setGmtModifieDate(new Date());
list.add(product);
}
return list;
}
}

(5)建立SimpleCURD檢視

           1)建立DataSet

              1>用來儲存資料,所以需要知道資料型別,所以需要指定DataType


              在這裡必須要選擇Collection型別,因為DataSet中的資料肯定是有多個

             2>因為要知道DataSet中的資料從哪裡獲取,所以需要指定dataProvider

             dataProvider格式和ajax請求一樣,為類名(首字母小寫)#方法名

           2)建立DataGrid

               因為DataSet只是一個資料集合,不能顯示,所以我們需要一個grid來顯示資料

              只用指定dataSet即可

(6)執行

           

(7)增刪資料

         1)DataPilot是用來定義DataSet的資料操作的,但是必須依附在ToolBar上,所以我們需要先定義ToolBar,在在其下面定義一個DataPilot

          其中:

          1>定義dataSet,也就是關聯的DataSet

          2>定義itemCodes,也就是需要哪些按鈕

屬性

描述

dataSet

dsProducts

繫結的DataSet物件

itemCodes

,-,x

DataPilot中允許顯示的快捷按鈕, 表示新增按鈕,-表示刪除按鈕,x表示取消按鈕

         執行一下:

           可以看出已經出現了按鈕

           但是這些按鈕只是執行邏輯操作,並沒有真正刪除資料

         2)DataResolver

            如果要實現持久化,那麼就需要藉助DataResolver技術,DataResolver實際上就是將資料通過ajax傳送到後臺進行持久化處理

           1>一般DataResolver都是通過UpdateAction來配置的,所以我們在當前View中新增UpdateAction控制元件

           並在下面新增一個UpdateItem(實際可以新增多個),並且將dataSet設定為當前DataSet

           2>定義DataResolver

               直接定義在剛剛的SimpleCURD中即可

@Component
public class SimpleCURD {
@Autowired
private ProductDAO productDAO;
@DataProvider
public List<Product> getAll(){
return productDAO.getData();
}
@DataResolver
public void save(List<Product> products){
productDAO.save(products);
}
}

         這裡的DataResolver註解就是表示這個方法為DataResolver     

         其中DAO的方法為:

@Component
public class ProductDAO {
List<Product> list = new ArrayList<>();
{
for (int i = 0; i < 5; i  ) {
Product product = new Product();
product.setId(i);
product.setName(i "pro");
product.setPrice(i);
product.setGmtCreate(new Date());
product.setGmtModifieDate(new Date());
list.add(product);
}
}
public List<Product> getData() {
return list;
}
public void save(List<Product> products) {
list.addAll(products);
}
}

           3>定義UpdateAction中的dataResolver
 

           4>因為UpdateAction無法看到,所以我們在工具欄上再增加一個儲存按鈕,用來執行這個事件

          執行

            發現已經能夠實現增加和修改了

(8)使用者體驗修改

       只需要設定UpdateAction的executingMessage和successMessage即可

        效果如下: