在我使用Spring MVC的Web应用程序中,我有一个丰富的域模型。
我想将此域模型提供给客户端Web浏览器。例如,由于我的域模型包含方法Person
和Set<Person> getFriends()
的类DateTime getBirthday()
,我想在客户端使用这些方法。使用方案包括
persons
进行排序。请注意我在这里没有在“视图呈现阶段”(例如JSP)中访问我的域模型。我正在寻找在我的Web应用程序的用户浏览器上访问我的域模型。因此,例如,我不想在“视图呈现阶段”期间对Person
个实例进行排序。我希望稍后在我的用户浏览器上进行这种排序。
我挑战的解决方案是什么?
答案 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就像它们是本地的一样,带有自动参数 和结果序列化。
答案 4 :(得分:0)
两个populer javascript MVC框架:
http://backbonejs.org/
http://knockoutjs.com/
你可以亲自试试。建议总是主观的,你的选择也总是主观的。所以请亲自感受一下。