如何使客户端Web浏览器可以使用服务器端域模型?

时间:2013-03-04 00:20:45

标签: java spring-mvc client-side server-side domain-model

在我使用Spring MVC的Web应用程序中,我有一个丰富的域模型。 我想将此域模型提供给客户端Web浏览器。例如,由于我的域模型包含方法PersonSet<Person> getFriends()的类DateTime getBirthday(),我想在客户端使用这些方法。使用方案包括

  • 动态更新访问浏览器的HTML,以便在用户请求时列出所有朋友,或
  • 按生日那样在HTML中对persons进行排序。

请注意我在这里没有在“视图呈现阶段”(例如JSP)中访问我的域模型。我正在寻找在我的Web应用程序的用户浏览器上访问我的域模型。因此,例如,我不想在“视图呈现阶段”期间对Person个实例进行排序。我希望稍后在我的用户浏览器上进行这种排序。

我挑战的解决方案是什么?

5 个答案:

答案 0 :(得分:3)

Javascript - 有一些框架可以帮助减轻负担。您描述的场景是对某些服务的Ajax调用。您可以将数据表示为json,它是轻量级的,并且很容易使用javascript添加到页面中。

答案 1 :(得分:3)

Ember.js(特别是其Models)和Grails 完全一起使用时您想要的内容。我确信您可以使用任何Java框架来实现此目的,但Grails使其愚蠢变得容易。以下是一些可以帮助您入门的模式,但here's a complete example app

域类:

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

您需要查看my answer on getting the two to play together in perfect harmony以了解更复杂的应用程序。

答案 2 :(得分:2)

Abdull你看过GWT(Google Web ToolKit)http://bit.ly/YYz2Yx吗?

以下是一些示例代码,用于说明客户端组件的创建。

e.g。加载联系人

            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(对于实际代码示例)

答案 3 :(得分:0)

如果您不仅限于浏览器 - 以及javascript,我现在就会尖叫RMI。幸运的是,似乎有一个解决方案可以使它工作。我没有尝试过,但它可能是值得的:

  

jabsorb是一个简单,轻量级的JSON-RPC库,用于通信   在浏览器中运行的Javascript和运行在Java上的Java之间   服务器。它允许您从服务器上调用Java方法   Javascript就像它们是本地的一样,带有自动参数   和结果序列化。

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

答案 4 :(得分:0)

两个populer javascript MVC框架:

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

你可以亲自试试。建议总是主观的,你的选择也总是主观的。所以请亲自感受一下。