GWT RequestFactory и несколько запросов - PullRequest
6 голосов
/ 10 февраля 2011

Есть ли способ использовать 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();

Но я получаю сообщение об ошибке, что запрос уже выполняется.Когда я сделал два отдельных запроса Employee:

    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 может объединить несколько запросов - мне нужно создавать сотни объектов одновременно, и я не хочу делать сотни запросов!

1 Ответ

9 голосов
/ 10 февраля 2011

Да, это возможно.В первом примере просто удалите строку

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