Как поделиться объектами домена на Grails с Ext GWT (GXT)?

StackOverflow https://stackoverflow.com/questions/238746

  •  04-07-2019
  •  | 
  •  

Вопрос

Мое приложение логически разделено на сервер, который содержит мои доменные объекты и контроллеры Grails; и клиент, где у меня есть мои классы Ext GWT, которые создают все страницы пользовательского интерфейса.

Для запросов пользовательского интерфейса я использую AJAX-вызов метода контроллера, который возвращает, например, список объектов домена в виде структуры JSON.

Следуя принципу СУХОЙ, я не хотел бы "сериализовать" данные домена в строку JSON на сервере затем десериализуют его на клиенте в другую структуру - я бы хотел воспользоваться уже имеющимся у меня объектом Domain, и мне не нужно менять несколько мест при добавлении , измените или удалите новое поле.

Вопрос: это хороший путь?

Если да, как лучше сделать доменные объекты .groovy доступными на клиентской стороне? Ext GWT Java классы?

Если нет, то почему это плохо и что бы вы посоветовали вместо этого?

Это было полезно?

Решение

Нет хорошего способа - вам нужен Java-объект, который GWT сериализуем. Единственное реальное решение, которое я вижу, это написать плагин (или добавить к плагину GWT) способ автоматической генерации объекта передачи данных, возможно, с использованием аннотаций в объекте домена grails.

Аналогичный метод используется для автоматической генерации интерфейсов RPCAsync в плагине gwt - см. GwtGrailsPlugin.groovy в каталоге плагинов gwt, строка 133 или около того - начало.

Вы можете подключиться к этому (или просто изменить этот файл напрямую, возможно, проще) и вставить некоторый код для генерации файлов передачи данных. Дополнительным преимуществом может быть то, что вы можете детализировать объект передачи данных, чтобы личные данные (например, пароли!) Не передавались.

Другие советы

Кроме того, вы можете отправить свои данные клиентской стороне в формате json или xml. Вы можете создать REST API для вашего сервера.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top