Как сделать серверные доменные модели доступными для клиентского веб-браузера?

В моем веб-приложении, использующем Spring MVC, у меня модель богатого домена. Я хотел бы сделать эту модель домена доступной для веб-браузера клиента. Например, поскольку моя модель домена включает в себя класс Person с методами Set<Person> getFriends() а также DateTime getBirthday()Я хотел бы использовать эти методы на стороне клиента. Сценарии использования включают

  • динамически обновлять HTML-код браузера для просмотра списка всех друзей по запросу пользователя или
  • Сортировать persons в HTML к их дню рождения.

Обратите внимание, что я не ищу здесь доступ к моей доменной модели на "этапе рендеринга вида" (например, JSP). Я ищу здесь доступ к моей доменной модели в браузерах пользователей моего веб-приложения. Так, например, я не хочу сортировать Person экземпляры во время "этапа визуализации представления". Я хочу, чтобы эта сортировка произошла позже, в браузере моего пользователя.

Каковы решения моей проблемы?

5 ответов

Javascript - есть рамки, которые могут помочь облегчить бремя. Сценарий, который вы описали, - это вызов Ajax какой-то службе. Вы можете представить данные в виде json, который будет легким и достаточно простым для добавления на страницу с помощью javascript.

Ember.js (особенно его Модели) и Grails делают то, что вы хотите, когда используются вместе. Я уверен, что вы можете использовать любой Java-фреймворк для этого, но Grails делает это глупо легко. Ниже приведены несколько шаблонов для начала, но вот полный пример приложения!

Класс домена:

class Person {
    String name
}

контроллер:

class PersonsController {
    def index() { render (["person": Person.list()] as JSON) }
}

Ember.js App:

App.Store = DS.Store.extend({
   revision: 11,
   adapter:  DS.RESTAdapter.create({
    namespace: 'app'
  })
)};
App.Person = DS.Model.extend({
    name: DS.attr('string')
)};

В вашем браузере эта единственная команда заполнит хранилище данных в браузере путем извлечения /app/persons из бэкэнда. Изменение экземпляров в браузере будет автоматически HTTP POST обновленный экземпляр для вашего контроллера.

App.Person.list()

Вы можете проверить мой ответ о том, как заставить их играть вместе в идеальной гармонии для более сложных приложений.

Абдул, вы смотрели на GWT (Google Web ToolKit) http://bit.ly/YYz2Yx?

Вот пример кода, который иллюстрирует создание клиентских компонентов.

например загрузка контактов

            VerticalPanel contactsPanel = new VerticalPanel();
            contactsPanel.setSpacing(4);
            String[] contactNames = constants.cwStackPanelContacts();
            String[] contactEmails = constants.cwStackPanelContactsEmails();
            for (int i = 0; i < contactNames.length; i++) {
              final String contactName = contactNames[i];
              final String contactEmail = contactEmails[i];
              final Anchor contactLink = new Anchor(contactName);
              contactsPanel.add(contactLink)

http://bit.ly/12MOhZQ (для фактического примера кода)

Если бы вы не были ограничены браузером - и, таким образом, javascript, я бы кричал об RMI сейчас. К счастью, кажется, что есть решение, чтобы заставить его работать. Я не пробовал это, но это могло бы стоить:

jabsorb - это простая и легкая библиотека JSON-RPC для связи между Javascript, работающим в браузере, и Java, работающим на сервере. Это позволяет вам вызывать методы Java на сервере из Javascript, как если бы они были локальными, с автоматической сериализацией параметров и результатов.

https://code.google.com/p/jabsorb/

Два популярных JavaScript-фреймворка для JavaScript:

http://backbonejs.org/
http://knockoutjs.com/

Вы можете попробовать их лично. предложение всегда субъективно, ваш выбор всегда субъективен. так что просто почувствуй это сам.

Другие вопросы по тегам