Portlet 首选项

Portlet 将设置首选项以存储定制数据。在缺省情况下,PortletServingServlet Servlet 会将每个 Portlet 窗口的 Portlet 首选项存储在 Cookie 中。但是,您可以更改存储位置,以将它们存储在会话、.xml 文件或数据库中。

将 Portlet 首选项存储在 Cookie 中

cookie 的属性定义如下:
路径
context/portlet-name/portletwindow
名称:
cookie 的名称具有固定值 PortletPreferenceCookie
cookie 的值通过映射至以下结构而包含首选项列表:
*['/' pref-name *['=' pref-value]]
所有首选项都以“/”开头,并且后跟首选项名称。如果首选项有一个或多个值,那么名称后的值将用“=”字符隔开。空值用字符串“#*!0_NULL_0!*#”表示。例如,cookie 值可能类似 /locations=raleigh=boeblingen/regions=nc=bw

定制 Portlet 首选项存储器

可覆盖处理 cookie 的方式以将首选项存储在会话、.xml 文件或数据库中。要定制存储器,必须创建过滤器、Servlet 或 JavaServer Pages 文件作为新的入口点,以在调用 Portlet 之前合并请求和响应。检查以下示例包装器,以了解如何更改 PortletServingServlet 的行为以将首选项存储在会话而不是 cookie 中。

以下是主 Servlet 如何管理 Portlet 调用的示例。
public class DispatchServlet extends HttpServlet
{
    ...
  public void service(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException
  {
	response.setContentType("text/html");
	
	// create wrappers to change preference storage
	RequestProxy req = new RequestProxy(request);
	ResponseProxy resp = new ResponseProxy(request, response);

	// create url prefix to always return to this servlet
                ...
                req.setAttribute("com.ibm.wsspi.portlet.url.prefix", urlPrefix);
        
	// prepare portlet url
	String portletPath = request.getPathInfo(); 
                ...

	// include portlet using wrappers
	RequestDispatcher rd = getServletContext().getRequestDispatcher(modifiedPortletPath);
                rd.include(req, resp);
  }
}
在以下示例中,请求包装器将 cookie 处理更改为检索会话外部的首选项。
public class RequestWrapper extends HttpServletRequestWrapper 
{
    ...
    public Cookie[] getCookies() {
        Cookie[] cookies = (Cookie[]) session.getAttribute("SessionPreferences");
        return cookies;
    }
}
在以下示例中,响应包装器将 cookie 处理更改为将首选项存储在会话中:
public class ResponseProxy extends HttpServletResponseWrapper 
{
   ...
    public void addCookie(Cookie cookie) {
        Cookie[] oldCookies = (Cookie[]) session.getAttribute("SessionPreferences");
        int newPos = (oldCookies == null) ? 0 : oldCookies.length;
        Cookie[] newCookies = new Cookie[newPos+1];
        session.setAttribute("SessionPreferences", newCookies);

        if (oldCookies != null) {
        System.arraycopy(oldCookies, 0, newCookies, 0, oldCookies.length);
        } 
        newCookies[newPos] = cookie;
    }
}

指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cport_cookies
文件名:cport_cookies.html