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

Chiamate ajax nella jsp di configurazione di un portlet

Premessa :

vogliamo cambiare alcuni parametri del nostro portlet e, nella pagina di configurazione,
ci fa comodo inserire un po' di validazione dei parametri inseriti, magari utilizzando qualche chiamata ajax attraverso jquery per validare in modo asincrono i parametri inseriti.

La nostra struts action implementerà il metodo serveResource, per gestire la richesta asincrona:

@Override
public void serveResource(ActionMapping arg0, ActionForm arg1,
PortletConfig config, ResourceRequest request, ResourceResponse response)
throws Exception {

// my validation code
}


All'interno della nostra jsp di configurazione, invece, potremmo inserire le seguenti righe di codice jsp (taglib) per creare l'url alla nostra action :

<portlet:resourceURL var="ajaxUrl">
<portlet:param name="struts_action" value="/path/to/my/validation/action" />
</portlet:resourceURL>


...e questo frammento di codice javascript (jquery), per eseguire in modo asincrono la validazione del nostro form

<script>

....

jQuery.ajax({
url: <%=ajaxUrl.toString()%>,
data: "param1=" + param1 + "&params2=" + param2,
async: true,
success: function(data){
if(!data.valid) {alert("Invalid data !")}
}
});

...

</script>


...diamo per scontato che la nostra action sia stata configurata in modo opportuno in tutti
i file di configurazione di liferay (struts-config.xml, ecc...)


Il problema

L'url generato dai tag della jsp non punta alla action che ci aspettiamo : guardandolo bene, ci accorgiamo che viene costruito partendo da un portletId diverso da quello del nostro portlet. Anche i log riportano uno strano messaggio di warning, che ci avvisa che il path della nostra action non rientra nel dominio del portlet che stiamo utilizzando...che cosa succede...perchè questo comportamento ?

La soluzione

Quando configuriamo un portlet "abbandoniamo" il contesto del nostro portlet di origine, per trovarci invece dentro un portlet chiamato "Portlet Configuration" (in liferai 5.2.3 l'id di questo portlet è 86). I tag jsp che abbimo utilizzato nella jsp di configurazione generano un url per
il portlet di configurazione, non per il nostro. Per creare un url che punti alla nostra action, siamo costretti ad abbandonare le taglib e generare l'url attraverso il codice java, eliminando il precedente codice dalla nostra jsp e sostituendolo con questo, settando manualmente il portletId :

<%
LiferayPortletURL ajaxUrl = (LiferayPortletURL) renderResponse.createResourceURL();
ajaxUrl.setPortletId(ParamUtil.getString(request, "portletResource"));
%>


In questo modo tutto funziona e il nostro codice ajax riesce a raggiungere la nostra action di validazione.

Precedente
Commenti
Nessun commento. Vuoi essere il primo.