📄 portletsessionimpl.java
字号:
* that object is replaced. * <p/> * <p>After this method has been executed, and if the new object * implements <code>HttpSessionBindingListener</code>, * the container calls * <code>HttpSessionBindingListener.valueBound</code>. The container then * notifies any <code>HttpSessionAttributeListeners</code> in the web * application. * <p>If an object was already bound to this session * that implements <code>HttpSessionBindingListener</code>, its * <code>HttpSessionBindingListener.valueUnbound</code> method is called. * <p/> * <p>If the value is <code>null</code>, this has the same effect as calling * <code>removeAttribute()</code>. * * @param name the name to which the object is bound under * the <code>PORTLET_SCOPE</code>; * this cannot be <code>null</code>. * @param value the object to be bound * @throws IllegalStateException if this method is called on a * session which has been invalidated * @throws IllegalArgumentException if name is <code>null</code>. */ public void setAttribute(String name, Object value) throws IllegalStateException, IllegalArgumentException { setAttribute(name, value, PortletSession.PORTLET_SCOPE); } /** * Binds an object to this session in the given scope, using the name specified. * If an object of the same name in this scope is already bound to the session, * that object is replaced. * <p/> * <p>After this method has been executed, and if the new object * implements <code>HttpSessionBindingListener</code>, * the container calls * <code>HttpSessionBindingListener.valueBound</code>. The container then * notifies any <code>HttpSessionAttributeListeners</code> in the web * application. * <p>If an object was already bound to this session * that implements <code>HttpSessionBindingListener</code>, its * <code>HttpSessionBindingListener.valueUnbound</code> method is called. * <p/> * <p>If the value is <code>null</code>, this has the same effect as calling * <code>removeAttribute()</code>. * * @param name the name to which the object is bound; * this cannot be <code>null</code>. * @param value the object to be bound * @param scope session scope of this attribute * @throws IllegalStateException if this method is called on a * session which has been invalidated * @throws IllegalArgumentException if name is <code>null</code>. */ public void setAttribute(java.lang.String name, java.lang.Object value, int scope) throws IllegalStateException { if (name == null) { throw new IllegalArgumentException("name must not be null"); } if (scope == PortletSession.APPLICATION_SCOPE) { session.setAttribute(name, value); } else { session.setAttribute("javax.portlet.p." + request.getAttribute(SportletProperties.PORTLET_WINDOW_ID) + "?" + name, value); } } /** * Returns the object bound with the specified name in this session, * or <code>null</code> if no object is bound under the name in the given scope. * * @param name a string specifying the name of the object * @param scope session scope of this attribute * @throws IllegalStateException if this method is called on an * invalidated session * @throws IllegalArgumentException if name is <code>null</code>. * @return the object with the specified name */ public java.lang.Object getAttribute(String name, int scope) throws java.lang.IllegalStateException { if (name == null) { throw new IllegalArgumentException("name must not be null"); } if (scope == PortletSession.APPLICATION_SCOPE) { return session.getAttribute(name); } else { Object attribute = session.getAttribute("javax.portlet.p." + (String) request.getAttribute(SportletProperties.PORTLET_WINDOW_ID) + "?" + name); if (attribute == null) { // not sure, if this should be done for all attributes or only javax.servlet. attribute = session.getAttribute(name); } return attribute; } } /** * Returns an <code>Enumeration</code> of String objects containing the names of * all the objects bound to this session in the given scope, or an * empty <code>Enumeration</code> if no attributes are available in the * given scope. * * @param scope session scope of the attribute names * @throws IllegalStateException if this method is called on an * invalidated session * @return an <code>Enumeration</code> of * <code>String</code> objects specifying the * names of all the objects bound to * this session, or an empty <code>Enumeration</code> * if no attributes are available in the given scope. */ public java.util.Enumeration getAttributeNames(int scope) { if (scope == PortletSession.APPLICATION_SCOPE) { return session.getAttributeNames(); } else { Enumeration attributes = session.getAttributeNames(); Vector portletAttributes = new Vector(); /* Fix that ONLY attributes of PORTLET_SCOPE are returned. */ int prefix_length = "javax.portlet.p.".length(); String wId = (String) request.getAttribute(SportletProperties.PORTLET_WINDOW_ID); while (attributes.hasMoreElements()) { String attribute = (String) attributes.nextElement(); int attributeScope = PortletSessionUtil.decodeScope(attribute); if (attributeScope == PortletSession.PORTLET_SCOPE && attribute.startsWith(wId, prefix_length)) { String portletAttribute = PortletSessionUtil.decodeAttributeName(attribute); if (portletAttribute != null) { // it is in the portlet's namespace portletAttributes.add(portletAttribute); } } } return portletAttributes.elements(); } } /** * Removes the object bound with the specified name and the given scope from * this session. If the session does not have an object * bound with the specified name, this method does nothing. * * @param name the name of the object to be * removed from this session * @param scope session scope of this attribute * @throws IllegalStateException if this method is called on a * session which has been invalidated * @throws IllegalArgumentException if name is <code>null</code>. */ public void removeAttribute(String name, int scope) throws java.lang.IllegalStateException { if (name == null) { throw new IllegalArgumentException("name must not be null"); } if (scope == PortletSession.APPLICATION_SCOPE) { session.removeAttribute(name); } else { session.removeAttribute("javax.portlet.p." + (String) request.getAttribute(SportletProperties.PORTLET_WINDOW_ID) + "?" + name); } } /** * Specifies the time, in seconds, between client requests, before the * portlet container invalidates this session. A negative time * indicates the session should never timeout. * * @param interval An integer specifying the number * of seconds */ public void setMaxInactiveInterval(int interval) { session.setMaxInactiveInterval(interval); } /** * Returns the portlet application context associated with this session. * * @return the portlet application context */ public PortletContext getPortletContext() { return ctx; } // javax.servlet.http.HttpSession implementation ---------------------------------------------- public javax.servlet.ServletContext getServletContext() { // TBD, open issue. it would be good if we could also implement the ServletContext interface at the PortletContextImpl return session.getServletContext(); } public javax.servlet.http.HttpSessionContext getSessionContext() { return session.getSessionContext(); } public Object getValue(String name) { return this.getAttribute(name, PORTLET_SCOPE); } public String[] getValueNames() { // TBD return null; } public void putValue(String name, Object value) { this.setAttribute(name, value, PORTLET_SCOPE); } public void removeValue(String name) { this.removeAttribute(name, PORTLET_SCOPE); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -