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

Die Attribute des Cookies sind wie folgt definiert:
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.

Im Folgenden sehen Sie ein Beispiel dafür, wie das Hauptservlet den Portletaufruf steuert.
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);
  }
}
Im folgenden Beispiel ändert der Anforderungswrapper die Cookieverwendung, um die Vorgaben aus der Sitzung abzurufen.
public class RequestWrapper extends HttpServletRequestWrapper 
{
    ...
    public Cookie[] getCookies() {
        Cookie[] cookies = (Cookie[]) session.getAttribute("SessionPreferences");
        return cookies;
    }
}
Im folgenden Beispiel ändert der Antwortwrapper die Cookieverwendung, um die Vorgaben in der Sitzung zu speichern.
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;
    }
}

Symbol, das den Typ des Artikels anzeigt. Konzeptartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cport_cookies
Dateiname:cport_cookies.html