Preferencias de portlet
Los portlets establecen las preferencias para almacenar la información personalizada. De forma predeterminada, el servlet PortletServingServlet almacena las preferencias de portlet de cada ventana de portlet de un cookie. No obstante, puede cambiar la ubicación para modificarlas en una sesión, un archivo .xml o una base de datos.
Almacenamiento de preferencias de portlet en los cookies
- Vía de acceso
- contexto/nombre-portlet/ventanaportlet
- Nombre:
- El nombre del cookie tiene el valor fijo de PortletPreferenceCookie.
- Value
- El valor del cookie contiene una lista de preferencias obtenida
mediante la correlación con la siguiente estructura:
*['/' nombre-pref *['=' valor-pref]] - Todas las preferencias empiezan por '/' seguidas por el nombre de la preferencia. Si la preferencia tiene uno o más valores, éstos aparecen después del nombre separados por el carácter '='. Un valor nulo se representa mediante la serie '#*!0_NULL_0!*#'. Como ejemplo, el valor de cookie puede tener el siguiente aspecto: /locations=raleigh=boeblingen/regions=nc=bw
Personalización del almacenamiento de preferencias de portlet
Puede alterar temporalmente cómo se maneja el cookie para almacenar las preferencias en una sesión, un archivo .xml o una base de datos. Para personalizar el almacenamiento, debe crear un filtro, servlet o archivo JSP (JavaServer Pages) como nuevo punto de entrada que envuelva la solicitud y respuesta antes de llamar al portlet. Examine las siguientes envolturas de ejemplo para comprender cómo cambiar el comportamiento del PortletServingServlet para almacenar las preferencias en una sesión en lugar de en cookies.
public class DispatchServlet extends HttpServlet
{
...
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
// crear envolturas para cambiar el almacenamiento de preferencias
RequestProxy req = new RequestProxy(request);
ResponseProxy resp = new ResponseProxy(request, response);
// crear prefijo de url para volver siempre a este servlet
...
req.setAttribute("com.ibm.wsspi.portlet.url.prefix", urlPrefix);
// preparar url de portlet
String portletPath = request.getPathInfo();
...
// incluir portlet utilizando envolturas
RequestDispatcher rd = getServletContext().getRequestDispatcher(modifiedPortletPath);
rd.include(req, resp);
}
}
public class RequestWrapper extends HttpServletRequestWrapper
{
...
public Cookie[] getCookies() {
Cookie[] cookies = (Cookie[]) session.getAttribute("SessionPreferences");
return cookies;
}
}
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;
}
}