2009-11-17 2 views
4

Мой вопрос: что является лучшим способом отправить данные Java EE с аннотированными объектами данных в клиентов, чтобы использовать их в сетке, например? Разумеется, я мог бы вручную создавать модели клиентских моделей BaseModel для каждого объекта, но мне интересно, что может быть лучше всего здесь. Мне нужно пошаговое руководство, если это возможно.EXT GWT + java EE

+0

Я как-то отказался от Ext GWT по этой точной причине. – Bozho

ответ

3

Я использую ext-gwt (gxt) около года и чувствую вашу боль!

Из того, что я узнал до сих пор, кажется, что существует 3 стратегии перенося бобы туда и обратно между клиентом и сервером:

Вот краткий обзор каждой стратегии:

  1. Создать client pojo/bean, который расширяет BaseModel для каждого компонента компонента bean/pojo/entity на стороне сервера.
  2. Доля POJO/Бина между клиентом и сервером
  3. Преобразовать стороне сервера POJO/бобы в JSON перед отправкой клиенту и затем использовать JavaScript (JSON) объекты на стороне клиента.

Конечно, есть компромиссы для каждого.

Стратегия № 1 прекрасно интегрируется в gxt. Вы можете использовать встроенные магазины и привязки gxt. Это стратегия, которую я использовал в производственном приложении, и она сработала, но я нашел утомительным дублирование beans на клиенте и сервере. Лично я также обнаружил, что механизм хранения/привязки extjs (и gxt) может быть чрезмерно сложным и сложным для случаев с короткими.

Стратегия № 2: Это стратегия, которую я, скорее всего, буду использовать в своем следующем проекте gxt. Недостатком является то, что вы должны сделать свою собственную форму и привязку сетки в gxt на клиенте. Но это то, что вы можете поделиться всеми своими бобами/pojos. Ниже приведен краткий обзор деталей реализации:

В дереве src на стороне сервера добавьте файл .gwt.xml в корневой пакет, содержащий классы сервера pojo/bean. Например: Я создал этот файл с именем «GWT-models.gwt.xml» под com.daveparoulek.gwt.server.models

<module rename-to='gwt-models'> 
    <inherits name='com.google.gwt.user.User' /> 
    <source path="client" /> 
</module> 

В приведенном выше примере, бобы на самом деле находится внутри com.daveparoulek.gwt .server.models.client.

После того, как вы установили эту настройку, вы можете настроить проект gwt клиента, чтобы включить код src внутри com.daveparoulek.gwt.server.models, добавив тег «inherit» в gwt.xml-файл проекта gwt клиента, например :

<inherits name="com.daveparoulek.gwt.server.models" /> 

Стратегия № 3: После просмотра нескольких переговоров с Google на GWT, это, кажется, их предпочтительный способ иметь дело с объектами на стороне клиента. Хотя это приводит к созданию типа наложения json для каждой стороны сервера pojo/bean. Это также отлично не вписывается в мир gxt. Click here за очень хорошее введение в эту концепцию.

+0

Спасибо за ваш вклад и извините за поздний ответ! Я собираюсь выкопать себя в стратегию №3 и проверить галаад, а затем решить, какой из них будет лучшим для меня. – Pecc

+0

Привет! Я решил попробовать стратегию №1 вручную. Однако у меня есть некоторые вопросы по этому поводу: – Pecc

+0

- Поскольку gwt не может передавать сущности-объекты через rpc, а BeanModelFactory не может использоваться в gwt на стороне сервера, кажется, мне нужно сначала создать класс DTO для каждого объекта, а затем отправить этот DTO через rpc, а затем преобразовать его в BeanModel на стороне клиента. Я прав? – Pecc

0

Я не специалист, но кажется, что люди используют Gilead (у которого есть учебник) + GWT + GXT, чтобы облегчить процесс.

0

BeanModelFactory - это огромная трата вашего времени. Согласно Sencha help docs, вы можете просто вызвать getFactory по тому, что возвращает BeanModelFactory из вызова статического метода get(). Следуя их примеру, это возвращаемое значение оказывается экземпляром самого класса BeanModelFactory, который имеет нереализованный (абстрактный) метод getFactory().

Итак, вы получаете хороший нулевой указатель из ниоткуда. Спасибо за ничего.

Я придерживался стратегии № 1.