Avete appena eseguito tutti gli step necessari per deployare il vostro portlet mediante ext environment: aggiunto un elemento "portlet" a portlet-ext.xml, aggiunto un elemento "portlet" a liferay-portlet-ext.xml, configurato opprtunamente liferay-display.xml e aggiunto una entry a Language-ext.properties.
Tutto sembra perfetto, compresi i file struts-config.xml e tiles-defs.xml, eppure il vostro portlet non compare nel menu "Add Application" di Liferay.
Sì, effettivamente nei log di Tomcat c'è una strana eccezione...qualcosa di simile a questa:
ERROR [IncludeTag:79] Current URL /c/portal/render_portlet generates exception:
An exception occurred processing JSP page /html/portlet/layout_conf
iguration/view_category.jsp at line 84
81: }
82: }
83:
84: portlets = ListUtil.sort(portlets, new PortletTitleComparator(application, locale));
85:
86: if ((categories.size() > 0) || (portlets.size() > 0)) {
87: %>
Stacktrace:
21:33:28,949 ERROR [IncludeTag:165] java.lang.NullPointerException
...o un errore del tipo:
ERROR [IncludeTag:79] Current URL /c/portal/render_portlet generates exception:
An exception occurred processing JSP page /html/portlet/layout_conf
iguration/view_category.jsp at line 120
117: divId.append(newCategoryPath);
118: divId.append(":");
119:
120: matcher = pattern.matcher(PortalUtil.getPortletTitle(portlet, application, locale));
121:
122: while (matcher.find()) {
123: divId.append(matcher.group());
Stacktrace:
21:33:29,053 ERROR [IncludeTag:165] java.lang.NullPointerException
...ma siete assolutamente sicuri di non avere toccato quella jsp.
Molto probabilmente siete developer estremamente ordinati e vi prendete cura della formattazione dei sorgenti e dei file xml: il vostro IDE, quindi, è opprtunamente istruito per non eccedere in larghezza e portare a capo linee troppo lunghe.
In soldoni, il file portlet-ext.xml sarà simile a questo:
<init-param>
<name>view-action</name>
<value>/ext/reports/view_reports</value>
</init-param>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
</supports>
<resource-bundle>com.liferay.portlet.StrutsResourceBundle
</resource-bundle>
<portlet-preferences>
<preference>
Eccellente. In nome del disordine, modifichiamo il tag "resource-bundle" portando inline il tag di chiusura:
<resource-bundle>com.liferay.portlet.StrutsResourceBundle</resource-bundle>
Save, deploy, restart, login, Add Application, enjoy.