Liferay DXP ha introdotto una struttura completamente nuova per la visualizzazione della toolbar presente all'interno di un CRUD, attraverso la nuova famiglia di taglib <liferay-frontend />
.
In particolare, per ordinare le colonne di un SearchContainer
è ora necessario fare così:
<liferay-frontend:management-bar searchContainerId="myEntries">
<liferay-frontend:management-bar-buttons>
[...]
</liferay-frontend:management-bar-buttons>
<liferay-frontend:management-bar-filters>
<liferay-frontend:management-bar-navigation [...] />
<liferay-frontend:management-bar-sort
orderByCol="<%= orderByCol %>"
orderByType="<%= orderByType %>"
orderColumns='<%= new String[] { "createDate", "name", "title", ...} %>'
portletURL="<%= PortletURLUtil.clone(portletURL, renderResponse) %>"
/>
</liferay-frontend:management-bar-filters>
</liferay-frontend:management-bar>
La taglib liferay-frontend:management-bar-sort
viene configurata con l'ordinamento corrente e con l'elenco dei nomi dei campi su cui si vuole ordinare; dopodichè si occupa di renderizzare a video tutto l'occorrente per il suo funzionamento.
La taglib però accetta i nomi dei campi come array di stringhe e li usa anche come chiavi di traduzione; peccato che, in base allo standard di prodotto, i nomi composti da più parole (come ad esempio createDate
) abbiano una chiave di traduzione diversa dal nome stesso (ad esempio create-date
) e pertanto la tablig non è in grado di localizzare correttamente il testo. Purtroppo non esiste un altro attributo per specificare le label...
Come si fa quindi a specificare una label per i nomi composti da più parole o semplicemente una label diversa dal nome del campo stesso? Fortunatamente la cosa è molto semplice: basta passare come parametro una mappa anzichè un array di stringhe:
<%
Map<String, String> orderColumns = new HashMap<String, String>();
orderColumns.put("createDate", "create-date");
orderColumns.put("name", "full-name");
orderColumns.put("title", "title");
%>
<liferay-frontend:management-bar-sort
orderByCol="<%= orderByCol %>"
orderByType="<%= orderByType %>"
orderColumns="<%= orderColumns %>"
portletURL="<%= PortletURLUtil.clone(portletURL, renderResponse) %>"
/>
In pratica la chiave della mappa rappresenta il nome del campo, mentre il valore rappresenta la chiave di traduzione da utlizzare.