RE: Come si fa a includere una portlet nel menu CONFIGURATION ?

Bernardo Foschi, modified 6 Years ago. New Member Posts: 6 Join Date: 2/11/19 Recent Posts
Salve a tutti,

Sto muovendo i primi passi nello sviluppo con Liferay 7.1 e per l'esercizio vorrei riuscir a includere la mia neoata portlet
nel menu configuration del del sito padre.



Come si fa?
Sarà che sto cercando male online, ma non trovo nulla di supporto.

Grazie emoticon
Bernardo Foschi, modified 6 Years ago. New Member Posts: 6 Join Date: 2/11/19 Recent Posts
Dopo un po di ore perse sono arrivato alla soluzione, ma questa ancora necessita di una spiegazione teorica che non ho; sper che qualcuno possa darmela.

Seguendo la documentazione ufficiale ho trovato che si può pubblicare una portlet nel pannello di amministrazione del sito
definendo per essa una PanelApp (public class XxxxPanelApp extends BasePanelApp ) e definendo a modo le annotation @Component.
DOCS

Questa soluzione per ore comunque non mi ha funzionato perchè io modificavo una portlet già fatta per altri scopi e contenente un campo iniettato
public class XxxPortlet extends MVCPortlet {
@Reference(unbind="-")
    private XxxLocalServiceUtil _xxxLocalServiceUtil;
    public XxxLocalServiceUtil getXxxLocalServiceUtil() {  return _xxxLocalServiceUtil; }    
    public void setXxxLocalServiceUtil(XxxLocalServiceUtil clsu) { _xxxLocalServiceUtil = clsu; }
 
Consultando più attentamente la documentazione e gli esempi ho notato che invece loro suggeriscono di usarlo cosi:
public class XxxPortlet extends MVCPortlet {
    private XxxLocalService _xxxLocalService;
    public XxxLocalService getXxxLocalService() {  return _xxxLocalService; }    
    @Reference(unbind="-")
    public void setXxxLocalService(XxxLocalService cls) { _xxxLocalService = cls; }[b][/b]
cioè di iniettare direttamente l'interfaccia XxxLocalService invece della classe Util.


Questo contravviene a quanto ci è stato spiegato al corso che mi ha introdotto a questo portale ma non solo, contravviene anche il commento stesso sulla classe  XxxLocalService
[i][/i]public interface XxxLocalService extends BaseLocalService,
    PersistedModelLocalService {
    /*
     * NOTE FOR DEVELOPERS:
     * Never modify or reference this interface directly. Always use {@link XxxLocalServiceUtil} to access the xxx local service. Add custom service methods to {@link it.treeffe.feedback.service.impl.XxxLocalServiceImpl} and rerun ServiceBuilder to automatically copy the method declarations to this interface.
     */[i][/i]

confermo empiricamente che se inietto la classe Util, la portlet non parte neppure....

 
Sapresti spiegarmi come mai?


Grazie mille. emoticon
thumbnail
Daniele Baggio, modified 6 Years ago. Expert Posts: 336 Join Date: 12/5/08 Recent Posts
Qua bisogna ripassare i fondamentali del service builder di Liferay e della nuova architettura basata su OSGi..

E' corretto l'uso di un riferimento XxxLocalService e non contravviene affatto il commento "Never modify or reference this interface directly".
Infatti tu non la sta istanziando direttamente ma tramite @Reference ti viene servita una istanza corretta secondo  il lifecycle e la risoluzione delle dipendenze osgi.

Consiglio questa lettura: https://www.manning.com/books/osgi-in-action

​​​​​​​bye