Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> gwt rpc не понятки 
:(
    Опции темы
fara86
Дата 6.8.2009, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.6.2009

Репутация: нет
Всего: нет



есть пару методов возращяющее название времен года и месяцы
мне нужно получить название времени года и какие у него месяцы
делаю так
Код

......................... 
final GreetingServiceAsync greetingService = GWT.create(GreetingService.class);
greetingService.getSeason(new AsyncCallback() { 
public void onSuccess(Object result) { 
String[] res = (String[]) result; 
for (int j = 0; j < res.length; j++) { 
system.out.println(res[j]); 
greetingService.getMonth(res[j],new AsyncCallback() { 
public void onSuccess(Object result) { 
String[] res = (String[]) result; 
for (int i = 0; i < res.length; i++) { 
system.out.println(res[i]); 


}); 




});

но, получаю к примеру
лето
зима
весна
осень
июнь
июлю
.....................
хоть и у меня getMonth() вызывается в цикле getSeason() но все равно пока весь getSeason() не выполнится, до getMonth() дело не доходит, где ошибка у меня?
PM MAIL   Вверх
andyhomes
Дата 6.8.2009, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 14.7.2009

Репутация: 2
Всего: 2



Помедитируйте на досуге про однопотоковую среду (JS), асинхронные вызовы, DeferredCommand (прицепом).



PM MAIL   Вверх
fara86
Дата 6.8.2009, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.6.2009

Репутация: нет
Всего: нет



Цитата(andyhomes @  6.8.2009,  14:45 Найти цитируемый пост)
омедитируйте на досуге про однопотоковую среду (JS), асинхронные вызовы, DeferredCommand (прицепом).


Да я понял, что это с синхронными и асинхронными вызовами связанно, но как применить к моей задаче, тока такой вариант в голову лезет=)


Это сообщение отредактировал(а) fara86 - 6.8.2009, 14:47
PM MAIL   Вверх
fara86
Дата 7.8.2009, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.6.2009

Репутация: нет
Всего: нет



т.е. мне нужно применить синхронный вызов правильно?

Это сообщение отредактировал(а) fara86 - 7.8.2009, 08:24
PM MAIL   Вверх
andyhomes
Дата 7.8.2009, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 14.7.2009

Репутация: 2
Всего: 2



Цитата(fara86 @  7.8.2009,  07:18 Найти цитируемый пост)
а по сути мне надо чтоб выполнение шло как обычно, т.е. пока предыдущая строчка кода не выполнилась следующую не выполнять=)

Так и работает, по-другому - никак.


Ну, а чтобы реализовать то, что вы хотите...
можно, например, использовать очередь для сизонов
и инициировать обработку следующего в методе получения месяцев (в колбэке, естественно).

PM MAIL   Вверх
fara86
Дата 7.8.2009, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.6.2009

Репутация: нет
Всего: нет



Цитата(andyhomes @  7.8.2009,  08:35 Найти цитируемый пост)
Ну, а чтобы реализовать то, что вы хотите...можно, например, использовать очередь для сизонови инициировать обработку следующего в методе получения месяцев (в колбэке, естественно).

А чуть подробнее нельзя?
А что gwt не поддерживает синхронные вызовы?
Я провел тестик маленький
объявляю массив строк 
Код

String[] res=new Strin[5];

затем в методе

Код

........................
public void onSuccess(Object result) {
res = (String[]) result;
System.out.println(res[0]);
}

вывожу res[0];
и после опять вывожу 
Код

.................
System.out.println(res[0]);


но на консоли выводится 
null
Лето
т.е. получается доходит дело до onSuccess() и не получив ответа он продолжает выполнять программу, а как ответ пришел в callback то выводится на экран лето

Это сообщение отредактировал(а) fara86 - 7.8.2009, 08:50
PM MAIL   Вверх
andyhomes
Дата 7.8.2009, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 14.7.2009

Репутация: 2
Всего: 2



Цитата(fara86 @  7.8.2009,  08:41 Найти цитируемый пост)
А что gwt не поддерживает синхронные вызовы?

GWT, в общем-то, тут не причем. Он только компилирует ваш код на Java в JavaScript.

Нужно понимать как работает AJAX.
А работает он, грубо говоря, через XmlHttpRequest (XHR).
JS в браузере (однопотоковая среда) может посредством XHR отправить запрос,
но время его исполнения не известно и может быть долгим,
и в случае синхронного вызова JS бы просто простаивал, ожидая завершения запроса.

Поэтому XHR-у сообщаются JavaScript-callback-методы, которые он (XHR) вызывает
в окончании обработки запроса.
Зато, паралельно с выполнением AJAX-запрос(а/ов), JS может продолжить свою работу...

Короче, синхронность сами реализуйте.
Подумайте, в свете новых представлений, как это можно сделать.
Ну очередь - это один вариант, флаги какие-нибудь можно прикрутить, таймеры...
Можно, конечно и с другой стороны подойти - максимально использовать выгоды AJAX.
PM MAIL   Вверх
fara86
Дата 7.8.2009, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.6.2009

Репутация: нет
Всего: нет



мда нет синхронности помоему это минус большой, т.е. если допустим пользователь логинится, еше не получив ответа он выполняется другая часть кода, глупо это, а реализовывать свое это не изящно, но как вариант пойдет=(
PM MAIL   Вверх
andyhomes
Дата 7.8.2009, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 14.7.2009

Репутация: 2
Всего: 2



Цитата(fara86 @  7.8.2009,  09:26 Найти цитируемый пост)
мда нет синхронности помоему это минус большой

Это данность.

Цитата(fara86 @  7.8.2009,  09:26 Найти цитируемый пост)
т.е. если допустим пользователь логинится, еше не получив ответа он выполняется другая часть кода

Это "кривые руки".

Цитата(fara86 @  7.8.2009,  09:26 Найти цитируемый пост)
глупо это, а реализовывать свое это не изящно, но как вариант пойдет=( 

Глупо - делать выводы, не изучив достаточно технологию.

Смотрите примеры, думайте, изучайте...
PM MAIL   Вверх
fara86
Дата 7.8.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.6.2009

Репутация: нет
Всего: нет



Цитата

Это "кривые руки".


Тогда у всех программистов кривые руки, так как нет идеального кода=)

Цитата

Глупо - делать выводы, не изучив достаточно технологию.

Смотрите примеры, думайте, изучайте...

если вы знаете изящное решение моей проблемы может поможете, а то сказать типо смотри доки и т.д каждый может сказать
PM MAIL   Вверх
andyhomes
Дата 7.8.2009, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 14.7.2009

Репутация: 2
Всего: 2



Задачу опишите.

PS
И не надо вот это вот разводить:
выдергивать фразы из контекста, обобщать...

На Земле милион AJAX-разработчиков, и никто не испытывает проблем с асинхронными методами.
И вы станете милион первым, как только разберетесь в предмете.
PM MAIL   Вверх
fara86
Дата 7.8.2009, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.6.2009

Репутация: нет
Всего: нет



Цитата(andyhomes @  7.8.2009,  11:24 Найти цитируемый пост)
На Земле милион AJAX-разработчиков, и никто не испытывает проблем с асинхронными методами.И вы станете милион первым, как только разберетесь в предмете.

Я не спорю с этим, но шас не могу разобраться, не до понимаю, вот и прибегаю к помощи из вне=)
суть такая к примеру из базы дергается нащвание времени года, затем на основе результата дергаются месеца относящиеся ко времени года и нужно это отобразить но получается чушь смотрите первое сообщение как мне нужно!

PM MAIL   Вверх
andyhomes
Дата 7.8.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 14.7.2009

Репутация: 2
Всего: 2



Цитата(fara86 @  7.8.2009,  11:30 Найти цитируемый пост)
суть такая к примеру из базы дергается нащвание времени года, затем на основе результата дергаются месеца относящиеся ко времени года и нужно это отобразить но получается чушь смотрите первое сообщение как мне нужно!

Это что, курсовая/тестовая работа?

Если нет, то предлагаю переместиться на уровень выше (в описании задачи)...
А то, похоже, мы имеем дело с какой-то кривой и тупиковой веткой возможных решений неизвестной нам (кроме вас) задачи.

Ну, а если да...
Заведите переменную, например, idx - содержит индекс обрабатываемого элемента массива сезонов.
Получив сезоны вызываете функцию получения месяцев для первого элемента массива сезонов (idx=0)

Получив месяцы, в колбек-методе делаете вывод информации, инкремент idx
и новый вызов получения месяцев...
Ну, естественно, нужно проверять границы индекса.
PM MAIL   Вверх
fara86
Дата 7.8.2009, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.6.2009

Репутация: нет
Всего: нет



Вроде нормальный примерчик=)
ладно тогда вот такой вот
Код

public int getValue() { 
final AsyncCallback callback = new AsyncCallback() { 
public void onSuccess(Object result) { 
res = (int) result; 

public void onFailure(Throwable caught) { 
System.out.println("фигня"); 

}; 
greetingService.getValue(callback); 
return res; 
}

сначало происходит return res а потом уже тока ответ приходит, каким образом сделать чтоб не выполнялся return res пока не придет ответ от сервера?

Может не rpc использовать, а другое чтонить?

Это сообщение отредактировал(а) fara86 - 11.8.2009, 07:40
PM MAIL   Вверх
fara86
Дата 11.8.2009, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.6.2009

Репутация: нет
Всего: нет



Ну что ни кто не сталкивался с подобными проблемами?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1253 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.