Здравствуйте, Shanga, Вы писали:
S>Есть такая задача в которой просто не обойтись без сабж.
S>JavaScript: S>Нужно вызывать методы Java передавая им данные и получая от них. S>В единой сессии, т.е. DWR отпадает
Используем библиотеку Zkoss (http://zkoss.org), но это полноценный AJAX со всей фигней. К тому же болото, и работа с яваскриптом не всегда очевидна, иногда через полную Ж.
В данном случае занося данные в CContainer мы не можем вновь к ним обратиться(теряются),
DWR предназначен для работы с DB, а не с переменными класса...
S>В данном случае занося данные в CContainer мы не можем вновь к ним обратиться(теряются), S>DWR предназначен для работы с DB, а не с переменными класса...
Так сделайте его синглтоном (со Spring для этого ничего не придется делать особенного, без него — немного написать своего кода).
Кажется так
Это не тот случай, он будет глючить(проверено на опыте).
К проекту дофига всего прикручено...
S>>В данном случае занося данные в CContainer мы не можем вновь к ним обратиться(теряются), S>>DWR предназначен для работы с DB, а не с переменными класса...
L>Так сделайте его синглтоном (со Spring для этого ничего не придется делать особенного, без него — немного написать своего кода). L>Кажется так
В моём проекте DWR вызывает java beans, которые имеют session-scope (управление через Spring). Время жизни таких bean'ов равно времени жизни сессии. Нужно только корректно обеспечить мультипоточный доступ к bean.
Можешь дать примерчик, я что-то нормальной документации не нахожу...
O>Здравствуйте, Shanga, Вы писали:
O>В моём проекте DWR вызывает java beans, которые имеют session-scope (управление через Spring). Время жизни таких bean'ов равно времени жизни сессии. Нужно только корректно обеспечить мультипоточный доступ к bean.
Здравствуйте, Shanga, Вы писали: S>Можешь дать примерчик, я что-то нормальной документации не нахожу...
Не знаю, каковы ваши знания в Spring и DWR, так что извините за банальные вещи.
Шаг 0. Интегрируем DWR в Spring. На эту тему есть документация. В минимальном варианте нужно добавить тэг <dwr:configuration> в конфигурационный файл Spring.
1) Класс реализует интерфейс BeanInterface (я не стал писать его код), который содержит в себе объявления всех методов, которые Вы хотите использовать в JavaScript. Без использования интерфейса связка Spring-DWR не будет работать.
2) Методы класса объявлены synchronized. Этим я хотел показать, что доступ к объекту может осуществляться из разных потоков. В реальном объекте синхронизация может быть реализована более красиво и эффективно.
Шаг 2. Объявим наш класс в Spring. Ниже — фрагмент из конфигурационного файла Spring:
1) Время жизни объекта определено в session, то есть он будет создан при первом обращении и будет существовать до конца сессии. В принципе, время жизни может быть любым (и длиннее и короче жизни сессии), у Spring на этот счёт много возможностей. Важно то, что DWR об этом ничего не знает и знать не должен.
2) Тэг <dwr:remote> объявляет, что данный объект будет управляться DWR. В данном примере тэг пустой, но может содержать доп. информацию.
3) Тэг <aop:scoped-proxy> гарантирует правильность создания объекта (то есть его времени жизни) при работе с DWR. Имейте в виду, что реально DWR будет работать не с экземпляром класса MyBean, а с proxy-классом, созданным автоматически. Вот почему важно, чтобы вся функциональность была объявлена в интерфейсе.
Шаг 3. Работаем с объектом из JavaScript:
// в рамках одной сессии будет обращения к одному и тому же объекту
var s = MyBean.getSomeProp();
s = "<b>" + s + "</b>";
MyBean.setSomeProp(s);
Здравствуйте, Shanga, Вы писали:
S>как на счет AJAX-а?
S>как это реализовать?!
хм... создаешь XmlHttpRequest на стороне браузера, пишешь нужный урл, сессию сам браузер должен проставить
говоришь пост, гет, или что там у тебя... и ждешь...
а урл твой указывает на Controller какой нибудь, который умеет обрабатывать запросы от JS, дальше ты делаешь все что тебе нужно, и респонс рисуешь с помощью кастомного какого нибудь JSON view... вот и вся магия...