2011-02-10 3 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

Ах, как странно. Очень странно. Означает ли это, что мне нужно создать какой-то механизм для планирования вызова fire() после того, как я сделаю все вызовы persist(), которые я хочу сделать? Я думаю, это было бы довольно просто сделать с отложенной командой, но ... вроде неловко! –

+0

@Riley: Я бы обернул весь код, который создает запрос в методе или в его собственном объекте. Я бы использовал некоторую переменную (или поле), чтобы запомнить последний запрос. Затем, выполнив эту часть кода, я бы вызвал огонь по последнему запросу. (Я бы не использовал отложенную команду - это слишком шаткий, потому что нелегко убедиться, когда именно это будет выполнено.) –

+0

Обновление: я делал глупую ошибку, и теперь ваш код отлично работает. Я подумаю о способах объединения запросов. Спасибо Крису! –

Смежные вопросы