GWT новый EntityProxy в @OneToOne с другим EntityProxy с сервера - PullRequest
0 голосов
/ 26 февраля 2012

Я просто создаю новый прокси:

     LayoutExampleRequest r = requestFactory.employeeRequest();
     DepartmentProxy d  = r.create(DepartmentProxy.class);
     r.save(d);
     departmentEditor.editProxy(d, r);

Затем передайте Прокси и Запрос (LayoutExampleRequest) моему редактору

      driver.edit(proxy, request);

Пока здесь! все работает как задумано. Я могу сохранить объекты Отдела с нулевым EmployeeProxy. Теперь я получаю с предложением окно Proxys EmployeeProxy с сервера.

        search = new SuggestBox(new SuggestOracle() {
        @Override
        public void requestSuggestions(final Request request,final Callback callback) {
            System.out.println(request.getQuery());

            //ignore less than 3
            if(request.getQuery().length() > 3){
                 requestFactory.employeeRequest().search(request.getQuery()).fire(new Receiver<List<EmployeeProxy>>(){
                    @Override
                    public void onSuccess(List<EmployeeProxy> response) {

                        List<MySuggestion<EmployeeProxy>> suggestions = new ArrayList<MySuggestion<EmployeeProxy>>();
                        for(EmployeeProxy e:response){
                            MySuggestion<EmployeeProxy> suggestion = new MySuggestion<EmployeeProxy>();
                            suggestion.setModel(e,e.getFirstName(),e.getFirstName()+" "+e.getLastName());
                            suggestions.add(suggestion);
                        }
                        callback.onSuggestionsReady(request, new Response(suggestions));
                    }
                 });
            }
        }
    });

MySuggestion - это класс-оболочка для обработки EmployeeProxy.

Теперь я хочу добавить этот EmployeeProxy в мой DeparmentProxy, поскольку у меня есть @OneToOne на JPA.

        search.addSelectionHandler(new SelectionHandler<SuggestOracle.Suggestion>() {

        @Override
        public void onSelection(SelectionEvent<Suggestion> event) {             
            MySuggestion<EmployeeProxy> s = (MySuggestion<EmployeeProxy>)event.getSelectedItem();
            proxy.setSupervisor(s.getModel());
        }
    });

proxy - это EntityProxy для отдела (я отправил в мой редактор) driver.edit (прокси, запрос);

тогда я увольняю водителя:

              departmentEditor.getDriver().flush().fire(new Receiver<Void>() {
        @Override
        public void onSuccess(Void response) {
            Window.alert("Success");


            // refresh the datagrid
            Range range = dataGrid.getVisibleRange();
            dataGrid.setVisibleRangeAndClearData(range, true); //1st way

                            // create a new DepartmentProxy to bind to the Editor.
            createProxy();

            // change button text
            updateButton.setText("Save");

        }
        @Override
        public void onConstraintViolation(Set<ConstraintViolation<?>> violations) {
            for(ConstraintViolation v :violations){
                Window.alert(v.getMessage()+" "+v.getPropertyPath());
            }

        }

        @Override
        public void onFailure(ServerFailure error) {
            Window.alert(error.getMessage());
        }
    });

Проблема заключается в том, что я получаю ConstraintViolations из EmployeeProxy, это как драйвер для EmployeeProxy, но с нулевыми значениями. (Я проверяю моих сущностей с помощью JSR-330)

Не знаю, как установить связь с новым прокси с другим, взятым с сервера. в отношениях @OneToOne

Любая помощь была бы хороша!

Спасибо

/ * ОБНОВЛЕНИЕ * / Примерно так, но с редактором

            final LayoutExampleRequest r = requestFactory.employeeRequest();
    final DepartmentProxy d  = r.create(DepartmentProxy.class);

    d.setName("Name");
    d.setService(Service.CONTRACT_MANAGMENT);
    // get some random employee
    requestFactory.employeeRequest().findById(1).fire(new Receiver<EmployeeProxy>() {

        @Override
        public void onSuccess(EmployeeProxy response) {
            d.setSupervisor(response);
            r.save(d).fire(new Receiver<DepartmentProxy>() {

                @Override
                public void onSuccess(DepartmentProxy response) {
                    Window.alert("Kidding me! why editor cant get it work =p?");
                }
            });
        }
    });

1 Ответ

0 голосов
/ 08 марта 2012

Проблема заключалась в том, что я включил свойства своего редактора EmployeeProxy, поэтому, когда пользователь выбирает Employeproxy, он будет видеть информацию о нем, поэтому я удаляю их, затем делаю то же самое и теперь работаю.

Похож на GWTкогда обнаруживает свойства другого прокси в редакторе, думает, что вы его заполните.И строка:

proxy.setSupervisor (s.getModel ());

не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...