2011-02-10 9 views
6

Esiste un modo per utilizzare RequestFactory per creare due entità in una singola richiesta? Ho provato:GWT RequestFactory e richieste multiple

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(); 

Ma ottengo un errore che una richiesta è già in corso. Quando ho fatto due EmployeeRequests distinte:

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(); 

Poi due richieste separate sono realizzati dal browser. Spero che qualcosa in RequestFactory possa unire più richieste: devo creare centinaia di entità alla volta e non voglio fare centinaia di richieste!

risposta

9

Sì, è possibile. Nel tuo primo esempio, è sufficiente rimuovere la linea

createReq.fire(); 

Quando si chiama createReq2.fire() alla fine, poi GWT invia sia newEmployee e newEmployee2 in una singola richiesta (perché erano sia persistito nel contesto del vostro EmployeeRequest "request"). Personalmente trovo la semantica un po 'strana, ma questa è solo la mia opinione.

Addendum da Riley: la seguente sintassi è equivalente ed è molto più intuitivo:

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

Oh, come strano. Molto strano. Questo significa che devo creare un meccanismo per programmare una chiamata fire() dopo aver effettuato tutte le chiamate persist() che voglio fare? Immagino che sarebbe abbastanza semplice da fare con un comando differito, ma ... un po 'imbarazzante! –

+0

@Riley: vorrei avvolgere tutto il codice che crea la richiesta in un metodo o nel proprio oggetto. Userei qualche variabile (o campo) per ricordare l'ultima richiesta. Quindi, dopo aver eseguito questa parte del codice, richiamerei il fuoco sull'ultima richiesta. (Non userei un comando posticipato: è troppo traballante, perché non è facile accertarlo, esattamente quando verrà eseguito.) Aggiornamento –

+0

: Stavo facendo un errore stupido e ora il tuo codice funziona alla grande. Penserò ai modi per aggregare le richieste. Grazie Chris! –