In alcuni casi, può essere necessario associare delle note alle nostre entità e magari dare all'utente la possibilità di replicare alle note scritte da altri; per fare questo non è necessario implementare codice custom ma è possibile integrarsi con le discussion di Liferay.
L'operazione è piuttosto semplice, vediamo quindi come procedere.
All'interno della pagina JSP, tipicamente quella di modifica dei dati dell'entità, inseriamo il codice seguente:
<liferay-portlet:actionURL name="invokeTaglibDiscussion" var="discussionURL" />
<liferay-ui:discussion
className="<%= Entity.class.getName() %>"
classPK="<%= entity.getPrimaryKey() %>"
formAction="<%= discussionURL %>"
ratingsEnabled="<%= true %>"
redirect="<%= currentURL %>"
subject="<%= entity.getSubject() %>"
userId="<%= entity.getUserId() %>" />
Gli attributi indicati sono quelli più utilizzati ed hanno il seguente significato:
className
, rappresenta il nome della classe Java che rappresenta l'entità a cui associare le discussioni;classPK
, rappresenta la chiave primaria dell'entità a cui associare le discussioni;formAction
, rappresenta la actionURL che viene invocata per il salvataggio del commento;ratingsEnabled
, abilita/disabilita la votazione dei singoli commenti;redirect
, rappresenta la renderURL di ritorno dopo il salvataggio del commento;subject
, è una sorta di titolo da visualizzare;userId
, è l'identificativo dell'utente corrente.
Come si può notare, il meccanismo di associazione con le discussioni segue il classico pattern di Liferay che utilizza la coppia className/classPK
.
Infine è importante spendere 2 parole sulla actionURL da impostare nel parametro formAction
; tale URL deve infatti avere l'attributo name
valorizzato a invokeTaglibDiscussion
.
Come saprete, l'attributo name
di una actionURL rappresenta il nome del metodo (o dell'annotation) specifico di processAction che viene invocato dal portale.
Nel caso particolare il metodo invokeTaglibDiscussion
è già implementato dal portale all'interno della superclasse MVCPortlet
e pertanto non serve implementare nulla lato Java; ammesso che stiate usando sottoclassi di MVCPortlet
...
Enjoy!