Recherche…


Remarques

Cela fonctionne avec Liferay Portal jusqu'à la version 6.2.

Crochet JSP

Les hooks JSP sont un plugin spécial permettant de modifier le portlet principal jsp-s, disons que vous souhaitez modifier le portlet de connexion pour afficher Welcome in my custom login! .

La structure minimale pour un plug-in Hook est la suivante:

[project-name]-hook/
 └── docroot/
     ├── WEB-INF/
     │   ├── src/
     │   ├── lib/
     │   ├── liferay-hook.xml
     │   ├── liferay-plugin-package.properties
     │   └── web.xml
     └── META-INF/
         ├── custom_jsps/
         └── MANIFEST.MF

liferay-hook.xml est le fichier qui distingue le type de hook que vous utilisez, ici vous définissez le paramètre approprié pour le hook dans le hook, pour le hook JSP:

<?xml version="1.0"?>
<!DOCTYPE hook PUBLIC "-//Liferay//DTD Hook 6.2.0//EN" "http://www.liferay.com/dtd/liferay-hook_6_2_0.dtd">

<hook>
    <custom-jsp-dir>/custom_jsps</custom-jsp-dir>
</hook>

login.jsp se trouve dans Liferay dans /docroot/html/portlet/login/login.jsp , pour en faire un crochet, nous devons ajouter un fichier jsp avec le même nom et le même chemin dans notre dossier custom_jsps .

Lorsque le hook est déployé, Liferay recherchera la liferay-hook.xml custom-jsp-dir dans le liferay-hook.xml et remplacera toutes les pages JSP du portail par celles trouvées dans ce répertoire. Les fichiers jsp d'origine sont enregistrés avec le nom <orginal name>.portal.jsp pour être restaurés en cas de non- <orginal name>.portal.jsp du hook.

Nous pouvons même appeler les JSP d'origine dans le nouveau JSP modifié si nous voulons garder le code adaptable aux mises à jour ou aux mises à niveau de la version de la plateforme Liferay sous-jacente. Pour ce faire, utilisez le modèle suivant dans votre JSP personnalisé:

<liferay-util:buffer var="contentHtml">
    <liferay-util:include page="/html/{ JSP file’s path }" />
</liferay-util:buffer>

{ JSP file's path } dans ce cas sera portlet/login/login.portal.jsp . Cette opération s'appelle l' extension du fichier jsp d'origine .

Ensuite, nous pouvons ajouter du contenu avec:

<%
contentHtml = StringUtil.add("Stuff I'm adding BEFORE the original content", contentHtml,"\n");    
contentHtml = StringUtil.add(contentHtml,"Stuff I'm adding AFTER the original content","\n");
%>
<%= contentHtml %>

Crochets d'Action Struts

Ce type de crochet peut être utilisé pour remplacer portail de base (par exemple c/portal/login ) et portlet actions entretoises (par exemple /login/forgot_password ), ces actions pour le portail Liferay sont spécifiées dans un struts-config.xml fichier dans son WEB-INF Dossier WEB-INF Pour remplacer une action:

  1. liferay-hook.xml fichier liferay-hook.xml de votre plugin hook sous docroot/WEB-INF , ajoutez un élément docroot/WEB-INF struts-action dans l'élément hook.
  2. Dans l'élément struts-action , ajoutez struts-action-path qui spécifie le chemin d'action que vous remplacez et struts-action-impl qui spécifie votre classe d'action personnalisée. Cela ressemble à:
 <struts-action-path>/login/login</struts-action-path>
    <struts-action-impl>
    com.myhook.action.ExampleStrutsPortletAction
    </struts-action-impl>
</struts-action> 
  1. Créez une classe d'action de portlet Struts qui étend BaseStrutsPortletAction . Un exemple de cette classe est:
 public class ExampleStrutsPortletAction extends BaseStrutsPortletAction {

        public void processAction(StrutsPortletAction originalStrutsPortletAction,
                PortletConfig portletConfig, ActionRequest actionRequest,
                ActionResponse actionResponse) throws Exception {

            System.out.println("Custom Struts Action");

            originalStrutsPortletAction.processAction(originalStrutsPortletAction,
                    portletConfig, actionRequest, actionResponse);
        }

    public String render(StrutsPortletAction originalStrutsPortletAction,
            PortletConfig portletConfig, RenderRequest renderRequest,
            RenderResponse renderResponse) throws Exception {

        System.out.println("Custom Struts Action");

        return originalStrutsPortletAction.render(null, portletConfig,
                renderRequest, renderResponse);
    }
}

L'appel de la méthode en cours de substitution, comme originalStrutsPortletAction.processAction , n'est pas obligatoire mais constitue une bonne pratique pour que le comportement de l'action reste inchangé par rapport au portail Liferay. Ce type de hook peut être utilisé pour ajouter de nouvelles actions Struts, c'est la même chose que de modifier une action existante, dans ce cas, liferay-hook.xml serait:

<struts-action>
    <struts-action-path>/my/custom/path</struts-action-path>
    <struts-action-impl>
    com.myhook.action.ExampleStrutsAction
    </struts-action-impl>
</struts-action>

Bonjour utilisateur "Nom" avec crochets

Cet exemple montre comment créer un simple "Hello User [name]" après la connexion. L'exemple est basé sur l' exécution d'une action personnalisée à l'aide d'un hook

Depuis votre terminal de ligne de commande, accédez au dossier des hooks de votre plug-in SDK. Pour créer un projet hook, vous devez exécuter le script de création. Voici le format à suivre pour exécuter le script:

créer. [sh | bat] [nom-projet] "[Nom d'affichage du crochet]"

Sous Linux et Mac OS X, vous entrez une commande similaire à celle de cet exemple:

./create.sh Bonjour utilisateur "Bonjour utilisateur"

Sous Windows, vous entrez une commande similaire à celle de cet exemple:

create.bat Bonjour à l'utilisateur "Mon crochet"

L'assistant New Project de Liferay IDE et les scripts de création génèrent des projets hook dans le dossier des hooks de votre SDK Plugin. Le plug-in SDK ajoute automatiquement «-hook» au nom de votre projet.

Que vous ayez créé votre projet hook à partir de l'EDI de Liferay ou de la ligne de commande, vous obtenez la même structure de projet (voir ci-dessus).

  • Déterminez l'événement sur lequel vous souhaitez déclencher votre action personnalisée. Recherchez dans la documentation portal.properties la propriété d'événement correspondante. Indice: les propriétés de l'événement ont pour nom .event. Il existe des propriétés d'événement de session, de démarrage, d'arrêt et de portail dans les sections suivantes de la documentation portal.properties : Session - Événements de démarrage - Événements d'arrêt - Événements du portail
  • Dans votre projet hook, créez une classe Java qui étend la classe com.liferay.portal.kernel.events.Action. Remplacez la méthode Action.run (HttpServletRequest, HttpServletResponse) .
       import com.liferay.portal.kernel.events.Action;
       import javax.servlet.http.HttpServletRequest;
       import javax.servlet.http.HttpServletResponse;
       import com.liferay.portal.model.User;
       import com.liferay.portal.util.PortalUtil;

       public class HelloUser extends Action {
           public void run(HttpServletRequest req, HttpServletResponse res) {
               User user = PortalUtil.getUser(req);
               System.out.println("Hello User "+user.getScreenName());
           }
       }

Important: Si votre action accède à l'objet HttpServletRequest, étendez com.liferay.portal.kernel.events.Action; sinon, étendez com.liferay.portal.struts.SimpleAction.

  • Créez un fichier de propriétés, portal.properties , dans le dossier docroot / WEB-INF / src de votre projet hook. Ajoutez ensuite le nom de la propriété d'événement de portail qui correspond à l'événement sur lequel vous souhaitez effectuer votre action. Spécifiez le nom complet de votre classe d'action comme valeur de la propriété.

    `login.events.post=HelloUser`
    

    Par exemple, pour effectuer une action de classe juste avant la connexion du portail à un utilisateur, vous devez spécifier la propriété login.events.pre avec votre classe d'action comme valeur. Cela pourrait ressembler à ce paramètre de propriété.

Important: les propriétés du portail telles que login.events.pre acceptant plusieurs valeurs, vous devez ajouter vos valeurs aux valeurs existantes. Vous pouvez modifier les propriétés à plusieurs reprises à partir de crochets supplémentaires.

Modifiez uniquement une propriété de portail qui accepte une valeur unique à partir d'un plug-in à un seul crochet. Si vous modifiez la valeur d'une propriété à partir de plusieurs plug-ins, Liferay ne saura pas quelle valeur utiliser.

  • Editez votre fichier docroot / WEB-INF / liferay-hook.xml et ajoutez votre
    nom du fichier de propriétés du portail du crochet comme valeur pour le
    Élément <portal-properties>...</portal-properties> dans votre
    élément de crochet <hook>...</hook> . Par exemple, si le nom du fichier de propriétés de votre hook est portal.properties , vous devez spécifier cet élément:
<portal-properties>portal.properties</portal-properties>
  • Déployez votre hook, accédez à votre chemin d'accès et entrez ant clean deploy vous verrez le fichier .war dans le dossier dist.

Maintenant, si vous vous connectez à liferay, vous verrez dans le journal du serveur un message du type "Hello user Admin".

Crochet d'écoute modèle

Contexte

Les hooks de Listener Model sont un type de plugin Liferay qui écoute les événements pris sur un modèle et exécute le code en réponse. Les hooks d'écouteur de modèle sont similaires aux hooks d'action Struts personnalisés car ils répondent à une action effectuée dans le portail. Cependant, alors que les actions Struts répondent à une action prise par un utilisateur, un écouteur de modèle répond (avant ou après) à un événement impliquant un modèle Liferay.


Différences

Voici quelques exemples d’actions Struts v.

  • Action Struts
    • Utilisateur en ligne
    • Création de compte
    • Prolonger la session
    • Déplacer le dossier
  • Modèle auditeur
    • Après la création du dossier
    • Lorsque les informations utilisateur sont mises à jour
    • Après la suppression du signet
    • Avant qu'une association de rôle ne soit créée

La meilleure ressource pour apprendre l'architecture de Liferay est leur code source. Tous leurs fichiers source sont situés sur GitHub et en affichant leurs JavaDocs. Vous pouvez voir tous les modèles de portail principaux sur les JavaDocs et toutes les actions Struts sur GitHub.


Exemple

Dans ce tutoriel, nous allons développer un écouteur de modèle qui envoie un courrier électronique à un utilisateur après la création de son compte. Pour ce faire, nous allons écrire une classe appelée UserModelListener qui étendra BaseModelListener de Liferay. Nous allons brièvement passer en revue la création de hook et couvrirons les modifications nécessaires aux fichiers de configuration suivants

  • portal.properties

  • liferay-hook.xml

Commencer

Pour commencer à développer votre hook Model Listener, vous devez d'abord lancer votre application Liferay IDE ou Liferay Developer Studio.

Liferay IDE et Liferay Developer Studio sont tous deux des environnements de développement Eclipse personnalisés. Ils sont étonnamment similaires et un ensemble de directions devrait être suffisant pour les deux environnements.

Dans votre environnement de développement, exécutez les étapes suivantes.

  1. Dans le coin supérieur gauche, cliquez sur Fichier
  2. Passez votre souris sur Nouveau
  3. Cliquez sur Liferay Plugin Project

Vous allez engendrer cette fenêtre.

entrer la description de l'image ici

Veuillez entrer les informations comme indiqué ci-dessus

  • Nom du projet: User-Model-Listener
  • Sélectionnez Utiliser l'emplacement par défaut
  • Type de construction: Ant
  • Type de plugin: Crochet

Assurez-vous que votre projet se trouve dans le répertoire SDK Hook de Liferays Plugins . Vous devrez sélectionner votre SDK et votre runtime en conséquence.

Dans votre perspective Explorateur de packages , vous verrez la structure de répertoires suivante.

entrer la description de l'image ici


Développement de l'auditeur

Maintenant que vous avez créé votre hook, vous devrez créer votre classe UserModelListener personnalisée. Cette classe étendra la classe BaseModelListener de Liferay.

La classe BaseModelListener de Liferay est une classe abstraite qui implémente l'interface ModelListener. Vous ne souhaitez pas implémenter directement l'interface ModelListener, car vous devrez remplacer toutes ses méthodes.

Les méthodes suivantes vous sont fournies par l'interface ModelListener via la classe abstraite BaseModelListener .

  • onAfterAddAssociation
  • onAfterCreate
  • onAfterRemove
  • onAfterRemoveAssociation
  • onAfterUpdate
  • onBeforeAddAssociation
  • onBeforeCreate
  • onBeforeRemove
  • onBeforeRemoveAssociation
  • onBeforeUpdate

Créez votre classe UserModelListener dans le répertoire suivant. Pour créer la classe via l'interface graphique, exécutez simplement les commandes suivantes

  • Cliquez sur Fichier dans le coin supérieur gauche
  • Passez votre souris sur Nouveau
  • Classe de clic
docroot/
     WEB-INF/
           src/

Entrez les informations ci-dessous

entrer la description de l'image ici

Dans votre classe UserModelListener , collez le code suivant

package com.example.hook;

import com.liferay.mail.service.MailServiceUtil;
import com.liferay.portal.ModelListenerException;
import com.liferay.portal.kernel.mail.MailMessage;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.model.BaseModelListener;
import com.liferay.portal.model.User;


import javax.mail.internet.InternetAddress;

public class UserModelListener extends BaseModelListener<User> {
    private User user = null;

    @Override
    public void onAfterCreate(User user) throws ModelListenerException {
    this.user = user;
    
    if(isValidEmail()) {
        sendEmail("[email protected]", user.getEmailAddress(), "Welcome!", "Your account is created!");
    } 
    }

    private boolean isValidEmail() {
    return Validator.isNotNull(user.getEmailAddress()) && Validator.isAddress(user.getEmailAddress());
    }
    
    private void sendEmail(String from, String to, String subject, String body) {
    try {
        MailServiceUtil.sendEmail(new MailMessage(new InternetAddress(from), new InternetAddress(to), subject, body, false));
    } catch (Exception e) {
        System.err.print("E-Mail spawned by User Model Listener failed to " + user.getFullName() + " with message " + e.getMessage());
    }
    }
}

Configuration des propriétés

Afin de configurer l'association entre notre auditeur personnalisé et notre modèle, nous devons procéder à quelques ajustements finaux. Tout d'abord, créez un nouveau fichier portal.properties dans le répertoire suivant.

docroot/
     WEB-INF/
           src/
            + portal.properties

Une seule ligne doit être ajoutée au fichier.

value.object.listener.com.liferay.portal.model.User = com.example.hook.UserModelListener

Nous pouvons généraliser cela en disant que, pour tout écouteur de modèle, nous créons la valeur de propriétés associée doit être sous la forme de

value.object.listener.fully.qualified.model.name = fully.qualified.listener.name

En d' autres termes , si nous écrivions une classe CustomerDLFolderModelListener, emballé à l' intérieur com.example.code, pour le modèle DLFolder nous aurions la propriété suivante

value.object.listener.com.liferay.portal.model.DLFolder = com.example.code.CustomerDLFolderModelListener 

Enfin, localisez votre fichier liferay-hook.xml. Dans la vue Source , écrivez ce qui suit.

<?xml version="1.0"?>
<!DOCTYPE hook PUBLIC "-//Liferay//DTD Hook 6.2.0//EN" "http://www.liferay.com/dtd/liferay-hook_6_2_0.dtd">

<hook>
    <portal-properties>portal.properties</portal-properties>
</hook>

Explication

  1. La première ligne est un prologue facultatif qui spécifie la version du document et (dans certains cas) le jeu de caractères.
  2. La ligne 2 est une définition de type de document formelle (DTD) qui définit explicitement quels éléments et attributs sont valides
  3. Les lignes 3 et 5 sont constituées de l' élément Hook parent (l'un des éléments valides pris en charge par cette DTD)
  4. La ligne 4 remplace et étend le fichier portal.properties dans $ {liferay.home}

Pour voir quels autres éléments peuvent être utilisés dans ce fichier XML, vous pouvez référencer l'URL dans la définition DocType . Ceci est standard pour tous les fichiers XML et SGML avec une DTD . Service.xml (l'implémentation ORM de Liferay basée sur Hibernate ) est un autre exemple de fichier XML Liferay avec une DTD .


Construire et déployer

Construire et déployer des hooks est un processus simple. Le développement de plug-ins Liferay prend en charge l'automatisation de la construction et des dépendances avec

  • Fourmi
  • Lierre
  • Maven
  • Gradle

Dans notre exemple, nous avons utilisé Ant pour l'automatisation de la construction. Le fichier build.xml contient les commandes de génération (appelées cibles dans Ant ). Pour construire votre hook, exécutez simplement les commandes suivantes.

  1. Emplacement de votre fichier build.xml
  2. Dans votre IDE, faites glisser le fichier build.xml dans la perspective Ant
  3. Développez le fichier et exécutez la cible all

entrer la description de l'image ici

Dans la vue de votre console, vous devriez voir quelque chose de similaire à ce qui suit

Buildfile: C:\liferay-plugins-sdk-6.2-ee-sp11\hooks\User-Listener-Hook-hook\build.xml
all:
clean:
   [delete] Deleting directory C:\liferay-plugins-sdk-6.2-ee-sp11\hooks\User-Listener-Hook-hook\docroot\WEB-INF\classes
clean-portal-dependencies:
compile:
merge:
compile-import-shared:
    [mkdir] Created dir: C:\liferay-plugins-sdk-6.2-ee-sp11\hooks\User-Listener-Hook-hook\docroot\WEB-INF\classes
     [copy] Copying 5 files to C:\liferay-plugins-sdk-6.2-ee-sp11\hooks\User-Listener-Hook-hook\docroot\WEB-INF\lib
compile-java:
     [copy] Copied 3 empty directories to 3 empty directories under C:\liferay-plugins-sdk-6.2-ee-sp11\hooks\User-Listener-Hook-hook\docroot\WEB-INF\classes
    [javac] Compiling 1 source file to C:\liferay-plugins-sdk-6.2-ee-sp11\hooks\User-Listener-Hook-hook\docroot\WEB-INF\classes
merge:
war:
clean-portal-dependencies:
      [zip] Building zip: C:\liferay-plugins-sdk-6.2-ee-sp11\dist\User-Listener-Hook-hook-6.2.10.1.war
deploy:
     [copy] Copying 1 file to C:\liferay-portal-6.2-ee-sp11\deploy
BUILD SUCCESSFUL
Total time: 7 seconds

Avec votre Hook construit avec succès, il est maintenant temps de démarrer votre portail et de le déployer. Pour démarrer votre serveur et déployer le crochet, localisez la perspective du serveur .

  1. Faites un clic droit sur votre serveur et cliquez sur Ajouter ou supprimer
  2. Localisez User-Listener-Hook sous la sélection Disponible
  3. Une fois en surbrillance, cliquez sur le bouton Ajouter et cliquez sur OK.
  4. Cliquez sur le bouton Lire dans la perspective du serveur

entrer la description de l'image ici



S'il vous plaît laissez-moi savoir si vous avez des questions, des commentaires, des préoccupations, etc. Tous les commentaires constructifs sont grandement appréciés!





Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow