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.
L'intégration du framework Spring implique la modication de la structure de base du portlet, ainsi que de sa configuration.
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>
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>
Le framework Spring fourni un certain nombre d'annotations afin de gérer automatiquement les règles de mapping au sein du portlet.
@Controller | Indique que la classe est un controller du portlet : permet au minimum d'afficher un contenu. |
@RequestMapping | Permet de limiter le controller à un mode. Exemple pour le mode VIEW : @RequestMapping(value = "VIEW") |
@SessionAttributes | Permet de définir le cycle de vie des @ModelAttribute indiqués en session. |
@Service | Indique que la classe est un service du portlet. |
@Repository | Similaire à @Service, indique que la classe est un service du portlet ayant accès aux données. |
@Component | Composant générique Spring, sans rôle précisé. |
@RenderMapping | Méthode de rendu de la vue du portlet, équivalent à la méthode doView. |
@ActionMapping | Méthode d'action de portlet, équivalent à la méthode processAction. |
@ResourceMapping | Méthode de traitement des ressources, équivalent à la méthode serveResource. |
@Autowired | Permet de récupérer automatiquement l'instance d'un composant Spring. |
@Qualifier | Lorsqu'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. |