Загрузка данных из Javascript в GWT - PullRequest
2 голосов
/ 10 февраля 2009

Я пытался сделать следующее в течение нескольких дней безрезультатно:

У меня есть приложение GWT, которое при запуске выполняет несколько вызовов RPC для загрузки исходных данных. По большей части эти данные относительно статичны, поэтому я бы пропустил вызов RPC, если бы мог. Но данные изменяются чаще, чем приложение, поэтому я бы предпочел не включать их во время компиляции.

Вместо этого я беру данные и сохраняю их в формате JSON в статическом файле .js. Я включаю это в загрузочный HTML для приложения:

HTML ... GWT загружает вещи ...>

script src = "staticstuff.js"> / script> // это преднамеренно неправильно, поэтому будет отображаться при стеке HTML со статическим материалом, похожим на:

var startupdata = [JSON .....];

Затем в самом приложении мы делаем следующее:

private native JsArrayString getStaticData()/*-{
    return $wnd.startupdata;
}-*/;

Это прекрасно работает, когда наши данные - это массив, или строка, или какой-либо другой собственный объект JS. Кажется, я не могу сделать следующее:

private native OurMoreComplexObject getStaticData()/*-{
    return $wnd.startupdata;
}-*/;

Я мог бы извлекать объекты js и анализировать их в моем графе объектов самостоятельно, но я бы предпочел этого не делать, тем более что GWT уже создал для меня конвертер (поскольку OurMoreComplexObject) уже возвращается в вызовах RPC.

Кто-нибудь пытался что-то подобное раньше? Если да, то как мне заставить его работать? Есть ли другой способ сделать это? (Основная цель заключается в том, что если данные хранятся в файле, я могу загрузить их на нашу CDN вместо того, чтобы каждый раз пересылать вызовы на наши серверы при запуске)

Ответы [ 3 ]

2 голосов
/ 10 февраля 2009

Да (это то, чем я часто занимаюсь):

http://wiki.shiftyjelly.com/index.php/GWT#Speed_up_Page_Loading.2C_by_pre-serializing_your_GWT_calls

Основой этого является то, что вы делаете вызов, когда ваш сервер рендерит страницу, и заставляете GWT сериализовать ее в обычную форму RPC и сохраняете ее на странице в переменной javascript. Оттуда вы можете прочитать его. Надеемся, что ссылка выше должна иметь достаточно деталей для вас.

Основное преимущество заключается в том, что ваш клиент получает всю страницу в формате HTML / js и не нуждается в вызове AJAX для получения дополнительных данных.

0 голосов
/ 13 мая 2009

Если вы хотите придерживаться JSON (а не сериализовать ответ RPC), вы можете использовать обертку JavaScriptObject a.k.a. JSO. Это отличный способ получить сложные графы объектов из JSON без необходимости написания кода маршалинга. Из этого следует:

startupData = { "someProperty" : "someValue", "someList" : [ { "more", "json" } ] };


public class OurMoreComplexObject extends JavaScriptObject {
    protected OurMoreComplexObject() {}

    public native String getSomeProperty() /*-{
        return this.someProperty;
    }-*/;

    public native JSArray getSomeList()  /*-{
        return this.someList;
    }-*/;
}

Хорошая новость заключается в том, что он обладает полумагическими свойствами, поскольку ваш метод getStaticData будет просто работать. Плохая новость заключается в том, что вы не можете относиться к этим JSO так же легко, как к POJO. Работа с итерацией списка (через JSArray) может быть особенно болезненной.

Вы можете проверить больше здесь .

0 голосов
/ 20 февраля 2009

На эту же тему есть хорошая статья: http://www.techhui.com/profiles/blogs/simpler-and-speedier-gwt-with

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...