Portlet-Kurzreferenz
Verfasst von splitshade am Oktober 16, 2008
Ich habe mir kürzlich mal einige NOtizen zu Portlets gemacht, da dieser Blog mir als Notizblock dient, hier die Notizen
Portlet-Konfiguration
Portlets haben einen eigenen Deployment-Deskriptor – portlet.xml.
Dieser befindet sich im Verzeichnis WEB-INF.
Eine typische Konfiguration sieht so aus:
<portlet-app
xmlns=„http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd“
version=„1.0″ xmlns:xsi=„http://www.w3.org/2001/XMLSchema-instance“
xsi:schemaLocation=„http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd“>
<portlet id=„Pentasys_Login_Portlet“>
<portlet-name>PLoginPortlet</portlet-name>
<display-name>PENTASYS Login Portlet</display-name>
<portlet-class>
com.sun.faces.portlet.FacesPortlet
</portlet-class>
<!– <portlet-class>de.pentasys.myfaces.portlet.MyFacesGenericPortlet</portlet-class> –>
<init-param>
<name>default-view</name>
<value>/pages/index.jsp</value>
</init-param>
<init-param>
<description></description> <name>com.sun.faces.portlet.INIT_VIEW</name>
<value>/pages/index.jsp</value>
</init-param>
<init-param>
<description></description> <name>com.sun.faces.portlet.INIT_EDIT</name>
<value>/pages/edit.jsp</value>
</init-param>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
</supports>
<portlet-info>
<title>Pentasys Login Portlet</title>
<short-title>Pentasys Login Portlet</short-title>
<keywords>Pentasys Login Portlet</keywords>
</portlet-info>
</portlet>
</portlet-app>
Interessant hierbei ist der Tag <Portlet-Info>, da hier Meta-Informationen wie Titel etc.. angegeben werden können.
§ Der Tag <Portlet-Class> gibt die jeweilige Portlet-Klasse an (in diesem Fall ein BridgePortlet zur Verwendung von JSF)
§ Der Tag <init-param> kann benutzt werden, um init-Parameter an das Portlet zu übergeben.
§ Soll ein Resource-Bundle genutzt werden, kann dies mit dem Tag
<resource-bundle>com.foo.myApp.QuotePortlet</resource-bundle> geschehen.
Portlet-URL
Es gibt 2 URL-Typen – ActionURL und RenderURL.
Hiermit wird eine URL erzeugt, die den Portlet-Container entweder veranlasst, die processAction… oder die render.. Methoden aufzurufen. Um eine URL zu erstellen kann die create<..>URL – Methoden eines renderResponse-Objektes genutzt werden.
Innerhalb einer URL kann ebenfalls der PortletMode und die WindowState-Parameter gesetzt werden.
Standard-Portlet-Modes sind VIEW, EDIT und HELP. Eigene Modes können implementiert werden.
Welche Modi ein Portlet unterstützt wird im Deployment-Deskriptor festgelegt, mit Hilfe des Tags
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
</supports>
Unterstütze Window States sind NORMAL, MAXIMIZED und MINIMIZED.
Portal-Context
Jedes Portlet hat einen eigenen Context. Daten eines PortletContextes werden im ServletContext gespeichert, d.h. Portlets haben Zugriff auf Servlet-Daten und umgekehrt.
Portlet-Request
Über den Portlet-Request lassen sich Sicherheitsinformationen erfragen:
getAuthType()
getRemoteUser()
getUserPrincipal()
isUserInRole()
isSecure()
- Die Methode getAuthType liefert einen der möglichen Werte (BASIC_AUTH, DIGEST_AUTH, CERT_AUTH and FORM_AUTH)
- Die Methode getRemoteUser liefert den UserNamen des Benutzers der den Request abgesetzt hat.
- getUserPrincipal liefert ein Objekt vom Typ java.security.Principal mit dem Namen des Benutzers.
Portlet-Response
Über den Response kann ein Redirect veranlasst werden, mit der Methode „sendRedirect()“.
Preferences
Zum Verwalten von Preferences bietet ein Portlet die Klasse „PortletPreferences“.
Bsp:
PortletPreferences prefs = req.getPreferences();
String[] symbols =
prefs.getValues(”preferredStockSymbols”,
new String[]{”ACME”,”FOO”});
String 5 url = prefs.getValue(”quotesFeedURL”,null);
int refreshInterval =
Integer.parseInt(prefs.getValue(”refresh”,”10”));
Der Zusätliche Parameter jeweils ist ein Default-Value der zurückgegeben wird, wenn der angeforderte Wert nicht vorhanden ist.
Preferences sind Benutzerspezifisch und sollten nicht zwischen Benutzersessions geteilt werden.
Es ist möglich, für Preferences Default-Values im Deployment-Deskriptor zu übergeben.
<portlet-preferences>
<preference>
<name>PreferredStockSymbols</name>
<value>FOO</value>
<value>XYZ</value>
<read-only>true</read-only>
</preference>
<preference>
<name>quotesFeedURL</name>
<value>http://www.foomarket.com/quotes</value>
</preference>
</portlet-preferences>
</portlet>
Preferences können validiert werden, hierfür muss eine Klasse vom Typ PreferencesValidator implementiert werden und anschliessend im DeploymentDeskriptor registriert werden.
<portlet-preferences>
<preferences-validator>
com.foo.portlets.XYZValidator
</preferences-validator>
</portlet-preferences>
Sessions
Für das Session-Management bei Portlets gibt es 2 Scopes (APPLICATION- und SESSION-SCOPE).
Attribute im SessionScope bleiben gültig, solange man sich im gleichen PortletWindow befindet.
Dispatching
Ein Request-Dispatcher kann vom PortletContext über die Methode getRequestDispatcher(<Pfad>) erfragt werden. Der Pfad ist relativ zum Root des Contextes und muss mit einem „/“ beginnen.
Über die Methode getNamedDispatcher(<name>) kann ein Dispatcher für ein bekanntes Servlet erfragt werden.
Um ein Servlet- oder eine JSP-Seite zu inkludieren wird die Methode include(..) eines Request-Dispatchers aufgerufen.
Security
Die zuvor beschriebene Methode isUserInRole(..) kann benutzt werden, um zu prüfen ob ein user eine bestimmte Benutzerrolle innehat. Hierzu muss im Deployment-Deskriptor folgender Tag vorhanden sein.
<portlet>
…
<security-role-ref>
<role-name>FOO</role-name>
<role-link>manager</manager>
</security-role-ref>
</portlet>
Das Element<role-link> wird dazu benutzt, um einen Rollennamen auf eine im web.xml deployment-deskriptor angegebene rolle zu mappen. Wird dieses Element nicht angegeben, wird automatisch versucht, eine definierte Rolle mit dem im element <role-name> angegebenen value zu finden. Die hier definierten Rollen können als Argument für die Methode isUserInRole(..) genutzt werden.
Portlets können mit User-Constraints geschützt werden.
…
<security-constraint>
<display-name>Secure Portlets</display-name>
<portlet-collection>
<portlet-name>accountSummary</portlet-name>
</portlet-collection>
<user-data-constraint/>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
Tag-Lib
Es gibt eine TagLib zur Verwendung innerhalb von JSP-Seiten.
<%@ taglib uri=”http://java.sun.com/portlet” prefix=”p” %>
Über den Tag “<p:defineObject/>” warden nun die Objekte “renderRequest”,“renderResponse” und „portletConfig“ zur Verfügung gestellt.
Weiterhin kann über den Tag <p:actionURL/> und <p:renderURL/> eine jeweilige Action/oder RenderURL generiert werden.
Parameter für actionURL sind windowState, portletMode.
<portlet:actionURL windowState=”maximized” portletMode=”edit”>
<portlet:param name=”action” value=”editStocks”/>
</portlet:actionURL>