(Portal开发读书笔记)PortletSessionUtil 类

简介:

 JSR-286中有一个接口叫 PortletSessionUtil ,一度迷惑了我

 


  
  
  1. public class PortletSessionUtil 
  2.   private static final String PORTLET_SCOPE_NAMESPACE = "javax.portlet.p."
  3.  
  4.   public static String decodeAttributeName(String name) 
  5.   { 
  6.     if (name.startsWith("javax.portlet.p.")) { 
  7.       int index = name.indexOf('?'); 
  8.       if (index > -1) { 
  9.         name = name.substring(index + 1); 
  10.       } 
  11.     } 
  12.     return name; 
  13.   } 
  14.  
  15.   public static int decodeScope(String name) 
  16.   { 
  17.     int scope = 1
  18.     if (name.startsWith("javax.portlet.p.")) { 
  19.       int index = name.indexOf('?'); 
  20.       if (index > -1) { 
  21.         scope = 2
  22.       } 
  23.     } 
  24.     return scope; 
  25.   } 

其实,这个接口是解决如下获取PortletSession 不同scope上的属性的一个辅助方法:

 

众所周知,在PortletSession上存储的属性有两种scope,一种是APPLICATION_SCOPE,另外一种是PORTLET_SCOPE,而如果某Servlet或者JSP页面通过HttpSession 访问PortletSession上存储的属性的时候,就会有如下的情况发生:

(1)如果属性是存在PortletSession的 APPLICATION_SCOPE上的,那么非常简单,直接httpSession.getAttribute("这个属性名") 就可以拿到。

(2)如果属性是存在PortletSession的PORTLET_SCOPE上的,那么这个属性将会以encode的形式存在 ,javax.portlet.p.<window_id>?<attribute_name>,因为一个页面上会有多个portlet,所以这里的window_id 用于表示第几个portlet窗口。这时候,如果直接用httpSession.getAttribute("encode后的属性名”),就会取不到,那么怎么办呢?这时候就需要PortletSessionUtil出场了,他可以负责把真正的属性名<attribute_name>从javax.portlet.p.<window_id>?<attribute_name>中“剥离”出来,从而httpSession就可以正确的拿到属性值了。方法是:

 


  
  
  1. String attributeName = {encode后的如同javax.portlet.p.<window_id>?<attribute_name>形式的属性名}; 
  2. String decodedName = 
  3. PortletSessionUtil.decodeAttributeName(attributeName); 
  4. if(decodedName.equals("某原始属性名"
  5. && PortletSessionUtil.decodeScope(attributeName) 
  6. == PortletSession.PORTLET_SCOPE) { 
  7. myAttrValue = session.getAttribute(attributeName); 




本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/843946,如需转载请自行联系原作者

目录
相关文章
|
JavaScript 数据可视化 前端开发
《面向三维GIS的Cesium开发与应用》读书笔记
《面向三维GIS的Cesium开发与应用》读书笔记
|
安全 测试技术 数据安全/隐私保护
软件安全开发生命周期读书笔记
分阶段: 0. 教育和意识       1.微软成功的原因在于管理层支持和教育与培训.       2.工程师必须对基本的安全弱点、常见的安全漏洞类型、基本的安全设计有所了解。
1463 0
|
存储 安全 编译器
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
|
存储 算法 编译器
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(二)
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(二)
77 1
|
存储 算法 Java
[笔记]读书笔记 C++设计新思维《二》技术(Techniques)(二)
[笔记]读书笔记 C++设计新思维《二》技术(Techniques)(二)