2011-02-10 10 views
6

RequestFactoryを使用して1つのリクエストで2つのエンティティを作成する方法はありますか?私は試しました: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(); 

しかし、リクエストが既に進行中であるというエラーが表示されます。私は2つの別々の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(); 

を次に、2つの別々の要求は、ブラウザから作られています。私はRequestFactoryの何かが複数のリクエストをマージできることを望んでいます - 一度に何百ものエンティティを作成しなければならず、何百ものリクエストをしたくありません!

答えて

9

はい、可能です。あなたが最後にcreateReq2.fire()を呼び出すと、あなたの最初の例では、ちょうどライン

createReq.fire(); 

を削除し、その後、GWTは、彼らがいたので、両方とも「request」あなたEmployeeRequestの文脈に固執し(1つの要求でのnewEmployeeとnewEmployee2の両方を送信します)。私は個人的にセマンティクスがちょっと変わったと思っていますが、それは私の意見です。 Rileyの

補遺: 次の構文は同等で、はるかに直感的です:

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()呼び出しをスケジュールするためのメカニズムを作成する必要があることを意味しますか?遅れたコマンドでやるのはかなりシンプルだろうと思うけど、厄介なのだ! –

+0

@Riley:メソッドまたは独自のオブジェクトでリクエストを構築するすべてのコードをラップします。私はいくつかの変数(またはフィールド)を使って最新の要求を覚えています。その後、コードのこの部分を実行した後、私は最新の要求に火をつけるでしょう。 (私は遅延コマンドを使用しません - それはあまりにも不安定ですので、確かに実行することは確実ではありません) –

+0

更新:私は愚かな間違いを犯していました。私は要求を集約する方法について考えます。クリスおかげで! –

関連する問題