Un portlet peut être développé en utilisant les librairies SpringMVC-portlet proposées par le framework Spring, qui offre un certain nombre de facilités de développement.

Structure du portlet

L'intégration du framework Spring implique la modication de la structure de base du portlet, ainsi que de sa configuration.

Fichier /WEB-INF/portlet.xml

La classe d'implémentation du portlet est une classe fournie par Spring : org.springframework.web.portlet.DispatcherPortlet. La configuration du portlet peut également modifier la valeur de l'emplacement du fichier de configuration du contexte d'application Spring (par défaut : /WEB-INF/applicationContext.xml), en renseignant le paramètre contextConfigLocation.

Exemple :

<portlet>
    <portlet-name>test-portlet</portlet-name>
    <portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class>

    <init-param>
        <name>contextConfigLocation</name>
        <value>/WEB-INF/test-portlet.xml</value>
    </init-param>

    <expiration-cache>180</expiration-cache>

    <supports>
        <mime-type>text/html</mime-type>
        <portlet-mode>view</portlet-mode>
        <portlet-mode>admin</portlet-mode>
    </supports>
    
    <portlet-info>
        <title>Test portlet</title>
    </portlet-info>
</portlet>

Contexte d'application Spring

Exemple de fichier de configuration du contexte d'application Spring :

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">

    <context:annotation-config />

    <context:component-scan base-package="org.osivia.services.calendar.portlet" />

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="cache" value="true" />
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

</beans>

Annotations Spring

Le framework Spring fourni un certain nombre d'annotations afin de gérer automatiquement les règles de mapping au sein du portlet.

Annotation de classe

@ControllerIndique que la classe est un controller du portlet : permet au minimum d'afficher un contenu.
@RequestMappingPermet de limiter le controller à un mode. Exemple pour le mode VIEW : @RequestMapping(value = "VIEW")
@SessionAttributesPermet de définir le cycle de vie des @ModelAttribute indiqués en session.
@ServiceIndique que la classe est un service du portlet.
@RepositorySimilaire à @Service, indique que la classe est un service du portlet ayant accès aux données.
@ComponentComposant générique Spring, sans rôle précisé.

Annotation de méthode

@RenderMappingMéthode de rendu de la vue du portlet, équivalent à la méthode doView.
@ActionMappingMéthode d'action de portlet, équivalent à la méthode processAction.
@ResourceMappingMéthode de traitement des ressources, équivalent à la méthode serveResource.

Annotation d'attribut de classe

@AutowiredPermet de récupérer automatiquement l'instance d'un composant Spring.
@QualifierLorsqu'il y a ambiguïté sur l'instanciation (par exemple plusieurs implémentations pour une interface donnée), permet de préciser le nom du composant Spring.