Liferay-Demo

Mein erstes Liferay-Plugin

Logo Liferay

Bevor man mit dem Erstellen des Plugins starten, muss man zunächst einige Komponenten von Liferay (http://www.liferay.com/downloads) herunterladen und konfigurieren.

  • Liferay Portal 6.1 Community Edition
  • Liferay IDE 1.4
  • Liferay Plugins SDK 6.1 GA 2

Unter Hilfe findet man die Beschreibung wie die Einrichtung vorgenommen wird.

Ausschnitt des Liferay Plugins

Mein erstes Plugin für Liferay soll alle Benutzer des Liferay Servers anzeigen. Die Darstellung ist dabei bewusst sehr einfach gehalten.

Das Plugin listet alle Firmen auf, die in der lokalen Liferay-Datenbank enthalten sind. Zu jeder Firma werden dann die Nutzer in der Form: Nachname, Vorname und E-Mail angezeigt.

Im ersten Schritt wird in der Liferay IDE ein neues Projekt vom „Liferay Project“ erstellt.

 

Dabei erstellt die Liferay IDE ein entsprechendes Projekt und legt die erforderlichen Dateien, Klassen, Einstellungen und Verzeichnisse an. Für dieses erste Plugin sind vor allem die Dateien

  • UserDisplayPortlet.java
  • view.jsp
  • language.properties

Die Klasse UserDisplayPortlet beinhaltet die Logik, die zum Laden der Benutzer erforderlich ist. In der Klasse muss dazu noch die Methode

 public void doView(RenderRequest renderRequest, RenderResponse renderResponse)

implementiert werden. Die Methode doView wird dann aufgerufen, wenn die Anzeige des Portlet durchgeführt werden. Diesen Fall werden nun im ersten Schritt die Firmen mittel dem CompanyLocalServiceUtil geladen. Zu jeder Firma werden dann die Benutzer mittels dem UserLocalServiceUtil geladen. Firma und Benutzer werden in eine Map usersgespeichert und an den Request übergeben.

 @Override
    public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
        throws IOException, PortletException {

        Map<Company, List<User>> users = new HashMap<Company, List<User>>();
        renderRequest.setAttribute("users", users);

        try {
            log.debug("Loading Companies");
            List<Company> companies = CompanyLocalServiceUtil.getCompanies();
            log.debug("Found " + companies.size() + " companies");

            for (Company company : companies) {
                log.debug("Searching for company users: " + company);

                List<User> cusers =
                    UserLocalServiceUtil.getCompanyUsers(company.getCompanyId(),
                                                         QueryUtil.ALL_POS,
                                                         QueryUtil.ALL_POS);
                log.debug("Found " + cusers.size() + " users");

                users.put(company, cusers);
            }

            log.debug("Loading completed");
        }
        catch (Exception e) {
            log.fatal("Error while loading users", e);
            throw new PortletException("Error while loading users", e);
        }
        finally {
            super.doView(renderRequest, renderResponse);
        }
    }

Die Daten für die Anzeige finden sich nun im Request-Attribut users. Über die JSP-Seite view.jsp können nun die Daten dargestellt werden. Da in der View nicht direkt auf die Attribute im Request zugegriffen werden kann muss in der View zunächst die Objekte initialisiert werden.

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>
<portlet:defineObjects />

Nun finden sich in der JSP-View verschiedene Objekte, die man nutzen um die Daten abzurufen. Durch folgendes kann auf die User-Map zugegriffen werden.

<%
    Map<Company, List<User>> users = (Map<Company, List<User>>) renderRequest.getAttribute("users");
    int size = users.size();
    boolean found = size > 0;
%>

Zur Darstellung können verschiedene Möglichkeiten wie z.B. EL verwendet werden.

<c:forEach var="entry" items="<%=users.entrySet()%>">
	<p><liferay-ui:message key="Firma" />: <strong>${entry.key.mx}</strong>
	<ul>
		<c:forEach var="user" items="${entry.value}">
			<li>${user.lastName}, ${user.firstName}
				(${user.displayEmailAddress})</li>
		</c:forEach>
	</ul>
	</p>
</c:forEach>

Mittels dem message-Tag kann auf die Übersetzungen in der Datei language.properties zugegriffen.

Die Sourcen habe ich unter GitHub eingestellt. Sie sind als Tag „DemoUserDisplay“ markiert. Wichtig die Sourcen müssen in das Verzeichnis portlets im Liferay SDK.

Weitere Informationen finden man unter

1 comment for “Liferay-Demo

Schreibe einen Kommentar