2012-06-07 5 views
0
public class MyClass{ 

private String shared; 

public String mySharedFun() { 
    `Session session = Sessions.getCurrent();` 
} 

Я получаю Http-сессия «null» в приведенном выше случае, мне нужно реализовать любой интерфейс.Не удалось получить доступ к сеансу

+0

как вы реализовали 'Session.getCurrent()'? –

+0

Это сеанс httpSession или спящий режим? – mprabhat

+0

@JigarJoshi Я не понимаю, что означало у вас вышеупомянутый комментарий, может ли вы работать. –

ответ

0

Это работает, если он работает в обработчике 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.

0

Я полагаю, что класс Session взят из ZK. Правильный способ получения сеанса: Executions.getCurrent().getSession();

+0

Executions.getCurrent() вернет текущее выполнение только в том случае, если его код вызывает его в ZK Event thread (обработчик) – kachhalimbu

+0

yes @kachhalimbu Я попробовал и получил null для Executions.getCurrent(). можете ли вы ответить, это пример. –

+0

Я не знаю в этом случае ... –

0

передать запрос вашему методу. затем HttpSession session = (HttpSession) request.getSession(); даст вам сеанс. , если сеанс отсутствует, он создаст вам сеанс. Если вам не нужен новый сеанс для создания, то if (session.isNew()) сообщит вам, есть ли вообще текущий сеанс или нет.

Смежные вопросы