无法访问会话

时间:2012-06-07 05:23:50

标签: java http session servlets zk

public class MyClass{

private String shared;

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

我在上面的例子中得到了Http“session”null,我是否需要实现任何接口。

3 个答案:

答案 0 :(得分:0)

我认为Session类来自ZK。正确的方法是如何获得会话 Executions.getCurrent().getSession();

答案 1 :(得分:0)

将请求传递给您的方法。那么HttpSession session =(HttpSession)request.getSession();会给你这个会议。 如果没有会话,那么它将创建一个会话。 如果不需要创建新会话,那么(session.isNew())会告诉您是否有当前会话。

答案 2 :(得分:0)

如果它在ZK事件处理程序中运行,则此方法有效:

    SimpleSession s = (SimpleSession) Executions.getCurrent().getDesktop().getSession();
    HttpSession session = (HttpSession) s.getNativeSession();

似乎很难进入实际的http会话,但是当你有使用ZK的经验时,它通常不会做。放置数据的更自然的地方是在ZK隐式范围对象中,例如desktopScope或sessionScope,它们只是java.util.Map。

原因如下:用户可以在两个浏览器标签中打开两个网址,以便能够同时处理两个订单。每个打开的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是关于在桌面上的组件上触发事件的事件驱动编程;所以我坚持使用componentScope,desktopScope和sessionScope,它们在使用ZK时是“自然的”。