Portletvorgaben
Die Vorgaben werden von den Portlets festgelegt, um angepasste Informationen zu speichern. Standardmäßig speichert das Servlet "PortletServingServlet" die Portletvorgabe für jedes Portletfenster in einem Cookie. Sie können die Speicherposition jedoch in eine Sitzung, eine .xml-Datei oder in eine Datenbank ändern.
Portletvorgaben in Cookies speichern
- Pfad
- Kontext/Portletname/Portletfenster
- Name:
- Der Cookiename hat den festen Wert PortletPreferenceCookie.
- Wert
- Der Cookiewert enthält eine Liste mit Vorgaben entsprechend der folgenden Struktur:
*['/' Vorgabenname *['=' Vorgabenwert]] - Alle Vorgaben beginnen mit '/', gefolgt vom Namen der Vorgabe. Wenn die Vorgabe einen oder mehrere Werte enthält, werden die Werte nach dem Namen angegeben und durch das Zeichen '=' getrennt. Ein Nullwert wird mit der Zeichenfolge '#*!0_NULL_0!*#' angegeben. Der Cookiewert kann beispielsweise wie folgt aussehen: /locations=raleigh=boeblingen/regions=nc=bw
Portletvorgabenspeicher anpassen
Sie können die Art und Weise, wie Cookies zum Speichern der Vorgaben in einer Sitzung, einer .xml-Datei oder einer Datenbank verwendet werden, überschreiben. Zum Anpassen des Speichers müssen Sie eine Filter-, Servlet- oder JSP-Datei (JavaServer Pages) als neuen Eingangspunkt erstellen, der die Anforderung und die Antwort als Wrapper einschließt, bevor er das Portlet aufruft. Sehen Sie sich die folgenden Beispielwrapper an, um zu verstehen, wie ´das Verhalten des "PortletServingServlet" geändert werden kann, um die Vorgaben in einer Sitzung anstatt in Cookies zu speichern.
public class DispatchServlet extends HttpServlet
{
...
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
// Wrapper erstellen, um den Vorgabenspeicher zu ändern
RequestProxy req = new RequestProxy(request);
ResponseProxy resp = new ResponseProxy(request, response);
// URL-Präfix erstellen, um immer zu diesem Servlet zurückzukehren
...
req.setAttribute("com.ibm.wsspi.portlet.url.prefix", urlPrefix);
// Portlet-URL vorbereiten
String portletPath = request.getPathInfo();
...
// Portlet mit Wrappern einschließen
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;
}
}