Les sélecteurs correspondent à des critères permettant de filtre des listes de résultats.
Un sélecteur doit positionner 2 paramètres publics de la page qui vont forcer le rafraichissement des listes de la page.
Ces 2 paramètres sont:
Ces paramètres doivent être déclarés comme publics :
<portlet>
<supported-public-render-parameter>selectors</supported-public-render-parameter>
<supported-public-render-parameter>lastSelectors</supported-public-render-parameter>
</portlet>
<public-render-parameter>
<identifier>selectors</identifier>
<name>selectors</name>
</public-render-parameter>
<public-render-parameter>
<identifier>lastSelectors</identifier>
<name>lastSelectors</name>
</public-render-parameter>
Ces 2 paramètres doivent être valorisés dans la métode ProcessAction. La classe PageSelectorspermet d'aggréger les sélecteurs de la page dans un seul paramètre.
Exemple de valorisation
if( request.getParameter("selectors")!= null) {
response.setRenderParameter("lastSelectors", request.getParameter("selectors"));
}
response.setRenderParameter("selectors", PageSelectors.encodeProperties(selectors));
La liste se base sur la comparaison entre selectors et lastSelectors pour rafraichir la pagination. Ils doivent être déclarés en paramètres publics dans le fichier portlet.xml
<portlet>
<supported-public-render-parameter>selectors</supported-public-render-parameter>
<supported-public-render-parameter>lastSelectors</supported-public-render-parameter>
</portlet>
<public-render-parameter>
<identifier>selectors</identifier>
<name>selectors</name>
</public-render-parameter>
<public-render-parameter>
<identifier>lastSelectors</identifier>
<name>lastSelectors</name>
</public-render-parameter>
Pour analyser si le sélecteur a été modifié :
// Selectors
String selectors = request.getParameter("selectors");
String lastSelectors = request.getParameter("lastSelectors");
if ("".equals(selectors)) {
selectors = null;
}
// Current page is reset on selectors change
boolean selectorsChanged = (((selectors != null) && !selectors.equals(lastSelectors)) || ((selectors == null) && (lastSelectors != null)));
if (!((currentPageParameter == null) || selectorsChanged)) {
currentPage = NumberUtils.toInt(currentPageParameter);
}
La liste doit également rafraichir le lastSelectors afin de ne pas réeffectuer le traitement lors du render suivant.
// On render url, it is not possible to clear a parameter value (old value keeps unchanged)
// So put __NONE__
if ("__NONE__".equals(lastSelectors)) {
lastSelectors = null;
}
request.setAttribute("lastSelectors", StringUtils.isEmpty(selectors) ? "__NONE__" : selectors);
et réinitialiser le parameter public lastSelector
<portlet:renderURL var="url">
<portlet:param name="lastSelectors" value="${lastSelectors}" />
</portlet:renderURL>