Créer votre premier Portlet Liferay

Guide pas à pas pour débutants (Liferay 7.x)

Introduction

Si vous débutez avec Liferay DXP, le tout premier vrai jalon en développement est:

Comment créer mon premier Portlet Liferay?

Un Portlet est la brique UI fondamentale de Liferay.
Tout ce que vous voyez sur une page du portail Liferay est rendu par un ou plusieurs portlets.

Dans ce blog, vous allez apprendre :

  • Ce qu’est réellement un portlet

  • Les outils nécessaires

  • Comment créer un portlet « Hello World »

  • Comment fonctionne le cycle de vie d’un portlet

  • Comment le déployer et le tester

  • Les erreurs courantes des débutants


Qu’est-ce qu’un Portlet Liferay ?

Un Portlet est un composant UI Java modulaire qui :

  • S’exécute dans le portail Liferay

  • Rend une partie d’une page

  • Gère les actions utilisateur

  • Appelle des services et des APIs

  • Est déployé comme un module OSGi

Exemples :

  • Tableau de bord d’approbation

  • Boîte de réception de tâches

  • Formulaire de saisie

  • Vue de reporting

  • UI de workflow

👉 Pensez à un portlet comme à une mini application web à l’intérieur du portail.


Prérequis

Avant de commencer :

✔ Java 11 ou 17
✔ Liferay 7.3 ou 7.4
✔ Liferay Workspace (recommandé)
✔ Gradle (inclus avec le workspace)
✔ IDE : IntelliJ / Eclipse


Étape 1 – Créer un Liferay Workspace

Le Liferay Workspace est la structure de projet recommandée.

blade init liferay-workspace cd liferay-workspace

Cela crée :

liferay-workspace/ ├── modules/ ├── themes/ ├── wars/ └── build.gradle

Étape 2 – Générer un nouveau module Portlet

Utilisez Blade CLI :

blade create -t mvc-portlet -p com.example.hello hello-portlet

Cela crée :

modules/hello-portlet/ ├── src/main/java/ ├── src/main/resources/ ├── bnd.bnd └── build.gradle

Étape 3 – Comprendre la classe Portlet

Ouvrez la classe Java générée :

@Component( immediate = true, property = { "com.liferay.portlet.display-category=category.sample", "com.liferay.portlet.instanceable=true", "javax.portlet.display-name=Hello Portlet", "javax.portlet.init-param.template-path=/", "javax.portlet.init-param.view-template=/view.jsp", "javax.portlet.name=hello_portlet", "javax.portlet.resource-bundle=content.Language", "javax.portlet.security-role-ref=power-user,user" }, service = Portlet.class ) public class HelloPortlet extends MVCPortlet { }

Ce que cela signifie

  • @Component → Enregistre la classe comme portlet OSGi

  • MVCPortlet → Framework MVC par défaut de Liferay

  • view.jsp → Template UI

  • display-category → Catégorie d’affichage dans l’UI


Étape 4 – Créer l’UI (view.jsp)

Modifiez :

src/main/resources/META-INF/resources/view.jsp
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %> <%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %> <h2>Hello Liferay Portlet !</h2> <p>Bienvenue dans votre premier Portlet Liferay.</p>

Étape 5 – Construire et déployer le Portlet

Depuis la racine du workspace :

./gradlew deploy

Si Liferay tourne, vous devriez voir :

STARTED hello-portlet

Étape 6 – Ajouter le Portlet à une page

  1. Connectez-vous à Liferay

  2. Allez sur une page

  3. Cliquez sur Ajouter → Widgets

  4. Trouvez Hello Portlet

  5. Glissez-le sur la page

🎉 Vous venez de créer votre premier Portlet Liferay.


Comprendre le cycle de vie d’un Portlet

Un portlet passe par :

init() → render() → processAction() → destroy()

Dans Liferay MVC :

  • doView() → Rendu UI

  • processAction() → Traitement des formulaires

  • serveResource() → Appels AJAX


Étape 7 – Ajouter une action

Mettez à jour votre classe Portlet :

public class HelloPortlet extends MVCPortlet { public void submitForm(ActionRequest request, ActionResponse response) { String name = ParamUtil.getString(request, "name"); request.setAttribute("name", name); } }

Mettez à jour view.jsp :

<portlet:actionURL name="submitForm" var="submitUrl" /> <form action="${submitUrl}" method="post"> <input type="text" name="name" placeholder="Entrez votre nom" /> <button type="submit">Envoyer</button> </form> <c:if test="${not empty name}"> <p>Bonjour ${name} !</p> </c:if>

Comment les Portlets s’intègrent avec BPM & APIs

En production, les portlets :

  • Appellent des APIs Spring Boot

  • Démarrent des processus BPM (Camunda / jBPM)

  • Affichent des tâches de workflow

  • Présentent des tableaux de bord métier

Exemple :

restTemplate.postForObject( "http://localhost:8080/start-process", payload, Void.class );

Erreurs courantes des débutants 🚨

❌ Mettre de la logique métier lourde dans le portlet
❌ Couplage fort avec la base de données
❌ Ignorer les dépendances OSGi
❌ URLs codées en dur
❌ Aucune gestion d’erreur
❌ Pas de logs


Bonnes pratiques (éprouvées en production)

✔ Garder les portlets légers (UI uniquement)
✔ Mettre la logique métier dans Spring Boot
✔ Utiliser les APIs REST
✔ Externaliser la configuration
✔ Utiliser les APIs headless
✔ Ajouter logs & monitoring


Question d’entretien (très fréquente)

Q : Qu’est-ce qu’un Portlet Liferay ?
R : Un composant UI Java modulaire déployé comme un bundle OSGi dans le portail Liferay.


Conclusion

Un Portlet Liferay n’est pas juste un JSP.
❗ C’est un module OSGi complet avec un cycle de vie, des services et une UI.

Une fois que vous savez créer un portlet basique, vous pouvez :

  • Construire des tableaux de bord de workflow

  • Créer des portails d’approbation

  • Intégrer des moteurs BPM

  • Développer des interfaces entreprise


💼 Support professionnel disponible

Si vous rencontrez des problèmes sur des projets réels liés au développement backend d’entreprise ou à l’automatisation des workflows, je propose des services de conseil payants, de débogage en production, de support projet et de formations ciblées.

Les technologies couvertes incluent Java, Spring Boot, PL/SQL, Azure, ainsi que l’automatisation des workflows (jBPM, Camunda BPM, RHPAM), DMN/Drools.

📧 Contact: ishikhanirankari@gmail.com | info@realtechnologiesindia.com

🌐 Website: IT Trainings | Digital lectern | Digital rostrum | Digital metal podium     


Comments

Popular posts from this blog

jBPM Installation Guide: Step by Step Setup

Scopes of Signal in jBPM

OOPs Concepts in Java | English | Object Oriented Programming Explained