bloggers bloggers

Marco Napolitano
Messaggi: 79
Stelle: 0
Data: 17/02/22
Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Passare parametri tra due portlet

Ciao a tutti.

Vorrei condividere al volo questa cosa in cui mi sonoimbattuto poco fa.

Solitamente passiamo parametri a pagine diverse della stessa portlet utilizzando una renderURL e invochiamo una action di una portlet tramite la actionURL.

Ma se volessimo passare parametri da una portlet ad una pagina di un'altra? o se volessimo invocare una action di una portlet da un'altra portlet?

Lo scenario è il seguente.

Da una pagina con una portlet Xvoglio richiamare e visualizzare un'altra portlet Y che sta su un'altra pagina "abc".

per fare questo si usa la taglib liferay-portlet.

Nella jsp di partenza di X:

<liferay-portlet:renderURL plid="<%=destPagePlid %>"  portletName="<%=destPortletId%>" var="myVar">

<liferay-portlet:param name="myParam" value="12345" />

</liferay-portlet:renderURL>

<a href="<%=myVar%>">clicca</a>

dove destPagePlid è la chiave primaria della pagina di destinazione, che si riesce a ritrovare con una routine di questo tipo:

long pagePlid =0;

List <Layout> pagine = LayoutLocalServiceUtil.getLayouts(themeDisplay.getScopeGroupId(), false );

for(Layout pagina : pagine){

 String pagename =pagina.getName(themeDisplay.getLocale()); 

 if(pagename.equals("abc")){

  pagePlid=pagina.getPlid();

break;

 }

}

mentredestPortletId è il portletid della portlet di destinazione, nel classico formato nomeportlet_WAR_nomewebapp

in questo modo cliccando sul link "clicca" della pagina della portlet X invoco la URL della pagina "abc", passando anche un parametro alla portlet Y instanziata in quella pagina.

In modo del tutto analogo, si può richiamare una action se invece dell'renderURL usiamo la actionURL.

Spero possa essere utile.

Ciao a tutti

Marcello

Precedente
Commenti
Aggiungi Commento
Marco Napolitano
Non dimentichiamo che spesso, per recuperare il plid della pagina di destinazione, è forse più semplice utilizzare questo approccio che sfrutta il suo friendlyURL (tipicamente noto):

Layout layout = LayoutLocalServiceUtil.getFriendlyURLLayout(themeDisplay.getScopeGroupId(), false, "/the/page/url");
long plid = layout.getPlid();

Enjoy!
Inviato il 09/07/15 14.02.
marcello marangio
ottimo! grazie
Inviato il 09/07/15 14.02 in risposta a Marco Napolitano.