Attribution des filtres à un portlet

Une fois qu'un filtre de portlet a été enregistré, vous pouvez l'attribuer à un portlet. Vous pouvez affecter plusieurs filtres de portlets à un portlet.

Pourquoi et quand exécuter cette tâche

Pour attribuer plusieurs filtres de portlets à un portlet, définissez le paramètre de portlet FilterChain et indiquez une liste de filtres séparés par une virgule ou un point-virgule en tant que valeur.

Pour ajouter ce paramètre au portlet approprié durant l'exécution, utilisez l'option Modifier les paramètres du portlet Gestion des portlets.

La requête sera transmise aux filtres de la liste dans un ordre séquentiel, puis passera au portlet. La réponse de celui-ci repassera dans tous les filtres en sens inverse. Voir l'exemple suivant :
FilterChain = MyTranscodingFilter, MyAdStripper

Dans cet exemple de chaîne de filtres, les filtres effectuent les actions suivantes :

  • MyTranscodingFilter peut transcoder HTML en WML.
  • MyAdStripper supprime l'annonce des données en sortie du portlet.

La requête traite les étapes suivantes :

  1. MyTranscodingFilter est appelé en premier. Ce filtre analyse le marquage requis et détecte si WML est demandé. Puisque le portlet ne prend en charge que le format HTML, le client de la requête est encapsulé par ce filtre avec un encapsuleur de clients, qui agit en temps que client HTML du portlet. De plus, la réponse doit être encapsulée avec un encapsuleur qui intercepte les données en sortie du portlet ou des filtres suivants, afin de les traiter.
  2. MyAdStripper n'a pas à modifier la demande car il agit uniquement sur les données en sortie. Cependant, la réponse doit être encapsulée afin de stocker les données en sortie du portlet.
  3. Le portlet génère sa sortie HTML.
  4. MyAdStripper traite les données en sortie du portlet et supprimera l'annonce.
  5. MyTranscodingFilter traite ensuite les données en sortie du filtre précédent et les transcode en WML.

Vous ne pouvez pas utiliser plusieurs filtres pouvant effectuer le transcodage d'un marquage vers un autre dans une même chaîne de filtres.

Vous pouvez également déclarer la chaîne de filtre ou des parties de la chaîne de filtre à un niveau global pour tous les portlets développés avec l'API HCL. Pour cela, vous pouvez éditer ou ajouter une propriété FilterChain contenant une liste de filtres séparés par une virgule dans le fichier PortletFilterService.properties, tout comme dans l'exemple précédent (FilterChain = MyTranscodingFilter, MyAdStripper). Cette chaîne de filtre globale est fusionnée avec celle définie portlet par portlet, alors que les chaînes globales sont appliquées avant les chaînes locales.