Buongiorno a tutti e ben trovati sul nostro blog! ;)
Il post di oggi sarà super rapido e semplicissimo: di fatto, come spiego anche nell'intro, mi sono trovato a dover centralizzare taglib che vivevano in bundle
differenti all'interno di un unico bundle
centralizzato.
Fin qui la cosa potrebbe sembrare semplice: fai un po' di copia / incolla / trascina (per i più sofisticati potrei definirlo refactor.. ;)) ma poi.. Fai deploy e scopri che non funziona più nulla!
Come mai? Perché? Cosa NON ho copiato? Cosa ho sbagliato?
Prima di farmi attanagliare da tutti questi dubbi, come spesso faccio :), mi sono buttato a capofitto nei sorgenti di Liferay 7.1 e ho scoperto che la cosa, da sistemare, era davvero semplice!
bnd.bnd: come sempre, tutto parte da qui!
Anche questa volta il titolo del capitolo non è molto evocativo ;), però è un periodo durante il quale la mia creatività è bassa.. Non me ne vogliate!
Però il titolo è molto vero; infatti la prima cosa da fare è modificare il file bnd.bnd
(che poi altro non è che il responsabile di quello che finisce nel manifest del nostro bundle OSGi
) per dirgli:
- che, ovviamente, fornisce come servizio delle
taglib
; - che abbiamo più di una
taglib
all'interno del bundle
.
Per fare questa magia, quindi, ho modificato così il mio bnd.bnd:
Bundle-Name: dvel-util-taglib
Bundle-SymbolicName: it.dvel.playground.util.taglib
Bundle-Version: 1.0.0
Export-Package: \
it.dvel.playground.util.taglib.search.tag,\
it.dvel.playground.util.taglib.rubrica.tag
Provide-Capability:\
osgi.extender;\
osgi.extender="jsp.taglib";\
uri="http://www.d-vel.com/tld/dvel";\
version:Version="${Bundle-Version}",\
osgi.extender;\
osgi.extender="jsp.taglib";\
uri="http://www.d-vel.com/tld/rubrica";\
version:Version="${Bundle-Version}"
Web-ContextPath: /dvel-taglib
La parte interessante è chiaramente quella che riguarda la property Provide-Capability
; a questa, infatti, faccio corrispondere una lista di osgi.extender dove, per ognuno di essi, specifico la uri della singola taglib.
Fatto questo il problema è risolto! Ora non ci resta che usare il nostro modulo e quindi le nostre taglib!
Come fare? Semplice: nelle singole JSP dove ci servono, ci basterà importare la taglib (sempre nella init.jsp
, mi raccomando!):
<%@ taglib prefix="rubrica" uri="http://www.d-vel.com/tld/rubrica" %>
e poi.. Utilizzarla:
<rubrica:listUtil var="listUtil" />
Come detto, questo post è super veloce e molto semplice.. Se sapevate come fare questa cosa!!
Spero di avervi dato un buon suggerimento; se vi occorrono maggiori dettagli o siete semplicemente curiosi di conoscere qualche altro dettaglio su questo tema, come sempre, usate l'area dei commenti e saremo ben lieti di aiutarvi!!
A presto e buon divertimento con Liferay 7.1, le taglib (centralizzate tutte in un unico modulo) e i casi funzionali degli animali mitologici più strani che ci siano! :)
Alla prossima!!