dimanche 8 octobre 2017

Développement de Portlet Liferay avec Spring MVC



Portlet Liferay en Spring MVC


Si vous avez déjà développez des portlets avec Liferay, vous saurez probablement qu'un large choix de Frameworks est supporté par Liferay et que vous pouvez les associés avec d'autres outils pour réaliser vos portlets en toute liberté.

Parmis les Frameworks utilisé lors du développement de portlets, je cite : Struts, JSF, Vaadin, Spring.

L'article suivant va vous permettre d'utiliser l'approche Spring MVC dans la création des portlets Liferay.



Créer sous eclipse un projet Plugin Liferay :




Renseigner les informations sur votre projet surtout :

  • Build Type => Maven 

  • Active Profiles => Créer un profil maven pour votre version de Liferay 



  • Choisir le framework à utiliser pour le développement de la portlet => Spring MVC 


Voici à quoi ressemble la structure de votre projet de Portlet Spring MVC :





La version de Spring utilisé par défaut est 3.0.7, nous allons la changer pour une version plus récente 4.3.11 pour éviter des problèmes d'incompatibilité.

--------------------------------
pom.xml :
--------------------------------
<?xml version="1.0"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>HelloWorld</artifactId>
<packaging>war</packaging>
<name>HelloWorld Portlet</name>
<version>1.0.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>com.liferay.maven.plugins</groupId>
<artifactId>liferay-maven-plugin</artifactId>
<version>${liferay.maven.plugin.version}</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>build-css</goal>
</goals>
</execution>
</executions>
<configuration>
<autoDeployDir>${liferay.auto.deploy.dir}</autoDeployDir>
<appServerDeployDir>${liferay.app.server.deploy.dir}</appServerDeployDir>
<appServerLibGlobalDir>${liferay.app.server.lib.global.dir}</appServerLibGlobalDir>
<appServerPortalDir>${liferay.app.server.portal.dir}</appServerPortalDir>
<liferayVersion>${liferay.version}</liferayVersion>
<pluginType>portlet</pluginType>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.liferay.portal</groupId>
<artifactId>portal-service</artifactId>
<version>${liferay.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.liferay.portal</groupId>
<artifactId>util-bridges</artifactId>
<version>${liferay.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.liferay.portal</groupId>
<artifactId>util-taglib</artifactId>
<version>${liferay.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.liferay.portal</groupId>
<artifactId>util-java</artifactId>
<version>${liferay.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.portlet</groupId>
<artifactId>portlet-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc-portlet</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
</dependencies>
<profiles>
<profile>
<id>Liferay-v6.2-(Tomcat-7)</id>
<properties>
<liferay.version>6.2.5</liferay.version>
<liferay.maven.plugin.version>6.2.5</liferay.maven.plugin.version>
<liferay.auto.deploy.dir>D:\Liferay_Labs\Liferay6\6.2-ce-ga6\liferay-portal-tomcat-6.2-ce-ga6-20160112152609836\liferay-portal-6.2-ce-ga6\deploy</liferay.auto.deploy.dir>
<liferay.app.server.deploy.dir>D:\Liferay_Labs\Liferay6\6.2-ce-ga6\liferay-portal-tomcat-6.2-ce-ga6-20160112152609836\liferay-portal-6.2-ce-ga6\tomcat-7.0.62\webapps</liferay.app.server.deploy.dir>
<liferay.app.server.lib.global.dir>D:\Liferay_Labs\Liferay6\6.2-ce-ga6\liferay-portal-tomcat-6.2-ce-ga6-20160112152609836\liferay-portal-6.2-ce-ga6\tomcat-7.0.62\lib\ext</liferay.app.server.lib.global.dir>
<liferay.app.server.portal.dir>D:\Liferay_Labs\Liferay6\6.2-ce-ga6\liferay-portal-tomcat-6.2-ce-ga6-20160112152609836\liferay-portal-6.2-ce-ga6\tomcat-7.0.62\webapps\ROOT</liferay.app.server.portal.dir>
</properties>
</profile>
</profiles>
</project>
--------------------------------

Et voici notre Controller qui va afficher le mode VIEW de notre Portlet :
--------------------------------
PortletViewController.java
--------------------------------
package com.test;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.portlet.bind.annotation.RenderMapping;

@Controller
@RequestMapping("VIEW")
public class PortletViewController {

@RenderMapping
public String view(Model model) {
model.addAttribute("message", "Hello World Imil !");
return "HelloWorld/view";
  }

}
--------------------------------
view.jsp :
--------------------------------
<%@ page contentType="text/html" pageEncoding="UTF-8" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

This is the <b>HelloWorld</b> portlet.<br />

<h3><c:out escapeXml="true" value="${message}" /></h3>
--------------------------------

Nous allons maintenant compiler la Portlet et la déployer dans tomcat :


-----------------
log of deploy :
-----------------
[PortletHotDeployListener:492] 1 portlet for HelloWorld-1.0.0-SNAPSHOT is available for use
-----------------

Et sur l'interface de notre portail, nous allons ajouter la nouvelle portlet "HelloWorld" :



Et comme ça nous venons de créer notre première Portlet Liferay en Spring MVC.

Vous pouvez enrichir votre portlet comme vous faites souvent sur vos projets Spring MVC, et pour la couche métier il faut passer par le Service Builder de Liferay.

Et c'est ce qu'on va voir dans le prochain article : Créer une portlet Spring MVC avec Service Builder comme couche métier.


1 commentaire:

  1. Great and detailed tutorial. Liferay has amazing and useful features. We are Liferay Expert France and offers Liferay services. To get more details contact us

    RépondreSupprimer