Это работает, если он работает в обработчике ZK события:
SimpleSession s = (SimpleSession) Executions.getCurrent().getDesktop().getSession();
HttpSession session = (HttpSession) s.getNativeSession();
Кажется, трудно получить в реальной сессии HTTP, но это не то, что вы обычно делаете, когда у вас есть опыт с работы с ЗК. Более естественное место для размещения ваших данных находится в объектах неявной области ZK, таких как desktopScope или sessionScope, которые являются только java.util.Map.
Вот почему: пользователь может открыть два URL-адреса на вашем сайте в двух вкладках браузера, чтобы иметь возможность работать с двумя заказами одновременно. Каждый открытый url создаст рабочий стол zk. На каждой вкладке пользователь нажимает на вещи, обработчики событий (щелчки мыши пользователя) должны работать с бизнес-данными на рабочем столе, в которых работает обработчик событий. Если вы помещаете бизнес-данные в сеанс http, это глобально для этого пользователя; любой пользователь с двумя вкладками браузера, открывающимися одновременно с попыткой выполнить сразу два задания, будет иметь одну вкладку браузера, искажающую работу, которую они выполняют в другой. Если вы действительно имеете в виду, что что-то глобальное для пользователя, поместите его в sessionScope. Вещи фактически хранятся на карте в течение сеанса http.
На основной странице концепций документации представлены такие идеи на уровне http://books.zkoss.org/wiki/ZK%20Developer%27s%20Guide/Fundamental%20ZK/Basic%20Concepts/Page%20and%20Desktop, которые имеют ссылки на другие неявные объекты, такие как requestScope, componentScope, pageScope, spaceScope («ID space»).
Такие области, как requestScope, которые обычно не используются, поскольку обработка событий ZK абстрагирует вас от запросов ajax; события управляют desktopScope. Это кажется очень неестественным, когда вы приходите из мира запросов/сеансов Http, но ZK занимается программированием, управляемым событиями, с событиями, запущенными на компонентах, которые находятся на рабочем столе; поэтому я придерживаюсь ComponScope, desktopScope и sessionScope, которые являются «естественными» при работе с ZK.
как вы реализовали 'Session.getCurrent()'? –
Это сеанс httpSession или спящий режим? – mprabhat
@JigarJoshi Я не понимаю, что означало у вас вышеупомянутый комментарий, может ли вы работать. –