2011-02-10 90 views
6

有沒有一種方法可以使用RequestFactory在單個請求中創建兩個實體?我試過了:GWT RequestFactory和多個請求

EmployeeRequest request = requestFactory.employeeRequest(); 
    EmployeeProxy newEmployee = request.create(EmployeeProxy.class); 
    newEmployee.setName("Joe!"); 

    Request<Void> createReq = request.persist().using(newEmployee); 
    createReq.fire(); 

    EmployeeProxy newEmployee2 = request.create(EmployeeProxy.class); 
    newEmployee2.setName("Sam!"); 

    Request<Void> createReq2 = request.persist().using(newEmployee2); 
    createReq2.fire(); 

但是我得到一個錯誤,請求已經在進行中。當我做了兩個獨立的EmployeeRequests:

EmployeeRequest request = requestFactory.employeeRequest(); 
    EmployeeProxy newEmployee = request.create(EmployeeProxy.class); 
    newEmployee.setName("Joe!"); 

    Request<Void> createReq = request.persist().using(newEmployee); 
    createReq.fire(); 

    EmployeeRequest request2 = requestFactory.employeeRequest(); 
    EmployeeProxy newEmployee2 = request2.create(EmployeeProxy.class); 
    newEmployee2.setName("Sam!"); 

    Request<Void> createReq2 = request2.persist().using(newEmployee2); 
    createReq2.fire(); 

然後從瀏覽器發出兩個單獨的請求。我希望RequestFactory中的某些東西可以合併多個請求 - 我必須一次創建數百個實體,而且我不想提出數百個請求!

回答

9

是的,這是可能的。在你的第一個例子,只是刪除線

createReq.fire(); 

當你在結束通話createReq2.fire(),然後GWT在一個單一的請求都發送newEmployee和newEmployee2(因爲他們都是在你的EmployeeRequest「request」的背景下持續)。我個人覺得語義有點奇怪,但這只是我的看法。

附錄由萊利: 以下語法相當於並且更加直觀:

EmployeeRequest request = requestFactory.employeeRequest(); 
    EmployeeProxy newEmployee = request.create(EmployeeProxy.class); 
    newEmployee.setName("Joe!"); 

    request.persist().using(newEmployee); 

    EmployeeProxy newEmployee2 = request.create(EmployeeProxy.class); 
    newEmployee2.setName("Sam!"); 

    request.persist().using(newEmployee2); 
    request.fire(); 
+0

哦,怎麼怪異。真奇怪。這是否意味着我必須創建一些機制來在完成所有要做的persist()調用之後調度fire()調用?我想這對於延遲命令來說很簡單,但是......有點尷尬! – 2011-02-10 19:46:02