Préférences du portlet
Les préférences sont définies par les portlets pour stocker des informations personnalisées. Par défaut, le servlet PortletServingServlet stocke les préférences du portlet de chaque fenêtre d'un portlet dans un cookie. Vous pouvez cependant modifier l'emplacement pour les stocker dans une session, un fichier .xml, ou une base de données.
Enregistrement des préférences du portlet dans des cookies
- Chemin
- contexte/nom de portlet/fenêtre de portlet
- Nom :
- La valeur du nom du cookie est définie de manière fixe àPortletPreferenceCookie.
- valeur
- La valeur du cookie contient une liste de préférences pour le mappage sur la structure suivante :
*['/' nom-préf *['=' valeur-préf]] - Toutes les préférences commencent par '/' suivi du nom de la préférence. Si la préférence possède une ou plusieurs valeurs, la valeur suit le nom, précédée du caractère '='. Une valeur nulle est représentée par la chaîne '#*!0_NULL_0!*#'. Par exemple, la valeur du cookie peut ressembler à ceci : /locations=raleigh=boeblingen/regions=nc=bw
Personnalisation du stockage des préférences du portlet
Vous pouvez annuler la façon dont le cookie est géré pour enregistrer les préférences dans une session, un fichier .xml ou une base de données. Pour personnaliser le stockage, vous devez créer un fichier servlet ou JavaServer Pages filtre en tant que nouveau point d'entrée qui encapsule les requêtes et les réponses avant d'appeler le portlet. Examinez les encapsulations de l'exemple suivant de manière à comprendre comment modifier le comportement de PortletServingServlet pour stocker les préférences dans une session au lieu d'un cookie.
public class DispatchServlet extends HttpServlet
{
...
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
// créer des encapsuleurs pour modifier le stockage des préférences
RequestProxy req = new RequestProxy(request);
ResponseProxy resp = new ResponseProxy(request, response);
// créez un préfixe d'adresse url pour toujours revenir à ce servlet
...
req.setAttribute("com.ibm.wsspi.portlet.url.prefix", urlPrefix);
// préparez l'adresse url du portlet
String portletPath = request.getPathInfo();
...
// incluez le portlet à l'aide d'encapsuleurs
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;
}
}