In un precedente articolo (Creare PortletURL via Javascript) ho spiegato come creare una PortletURL utilizzando la libreria Javascript di Liferay.

Quanto spiegato a suo tempo funziona perfettamente tranne nel caso in cui Liferay sia installato fuori dal contesto ROOT di Tomcat; vediamo quindi come fare.

Il problema è legato al fatto che la libreria Javascript genera la URL come se Liferay fosse installato all'interno del contesto ROOT di Tomcat e quindi l'indirizzo finale generato è sbagliato.

Purtroppo l'unica soluzione è costruirsi a mano il percorso base di ogni URL, da usare poi per costruire la URL completa:

<aui:script use="liferay-portlet-url">
var basePortletURL = Liferay.ThemeDisplay.getPathMain() + '/portal/layout?p_l_id=' + Liferay.ThemeDisplay.getPlid();
var url = new Liferay.PortletURL(Liferay.PortletURL.RENDER_PHASE, null, basePortletURL);
</aui:script>

Il costruttore ha la seguente firma:

var PortletURL = function(lifecycle, params, basePortletURL) { ... }

dove:

  • lifecycle, rappresenta il tipo di URL da creare e può valere:
    • Liferay.PortletURL.ACTION_PHASE
    • Liferay.PortletURL.RENDER_PHASE
    • Liferay.PortletURL.RESOURCE_PHASE
  • params, rappresenta i parametri della URL
  • basePortletURL, rappresenta la URL di base

Entrando un pò del dettaglio, aggiungo che la chiamata che abbiamo visto nel precedente articolo:

var portletURL = Liferay.PortletURL.createRenderURL();

non rappresenta altro che la seguente chiamata:

var portletURL = new Liferay.PortletURL(Liferay.PortletURL.RENDER_PHASE);

Pertanto è poi possibile utilizzare quanto già visto in precedenza.