From: crawshaw Date: Wed, 24 Nov 2004 20:15:36 +0000 (+0000) Subject: make session object directly editable X-Git-Url: http://git.megacz.com/?p=org.ibex.xt-crawshaw.git;a=commitdiff_plain;h=1a9695b5601cd90a65c743c859931d7146bdeed3 make session object directly editable darcs-hash:20041124201536-2eb37-2e1fe5fff0c271e08e7203cfd5a50821433979f1.gz --- diff --git a/src/java/org/ibex/xt/Servlet.java b/src/java/org/ibex/xt/Servlet.java index fcdbde2..42de0ba 100644 --- a/src/java/org/ibex/xt/Servlet.java +++ b/src/java/org/ibex/xt/Servlet.java @@ -61,6 +61,31 @@ public class Servlet extends HttpServlet { catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } + private JS session = new JS() { + public Object get(Object key) throws JSExn { + //#switch(JS.toString(key)) + case "created": return new JSDate(request.getSession(true).getCreationTime()); + case "accessed": return new JSDate(request.getSession(true).getLastAccessedTime()); + case "invalidate": return METHOD; + //#end + return super.get(key); + } + public void put(Object key, Object val) throws JSExn { + //#switch(JS.toString(key)) + case "created": throw new JSExn("can not set session.created"); + case "accessed": throw new JSExn("can not set session.accessed"); + case "invalidate": throw new JSExn("can not set session.invalidate"); + //#end + super.put(key, val); + } + public Object callMethod(Object method, final Object a, final Object b, Object c, Object[] rest, int nargs) + throws JSExn { + //#switch(JS.toString(method)) + case "invalidate": request.getSession(true).invalidate(); return null; + //#end + return super.callMethod(method, a, b, c, rest, nargs); + } + }; private JS params = new JS() { private List keys = null; public Object get(Object key) { return request.getParameter(JS.toString(key)); } @@ -144,11 +169,7 @@ public class Servlet extends HttpServlet { case "request.path": return request.getPathInfo(); case "response": return getSub("response"); case "response.header": return responseHeader; - case "session": return getSub("session"); - case "session.attr": return sessionAttributes; - case "session.created": return new JSDate(request.getSession(true).getCreationTime()); - case "session.accessed": return new JSDate(request.getSession(true).getLastAccessedTime()); - case "session.invalidate": return METHOD; + case "session": return session; case "page": return getSub("page"); //case "page.lastmodified": return new JSDate(new File(path).lastModified()); FIXME case "context": return getSub("context");