Recherche…


Introduction

Ce manuel contient les différentes manières dont le portlet peut coordonner ou communiquer entre eux et les différents scénarios pour lesquels une approche particulière est utilisée.

Remarques

Les références:

  1. Param de rendu public
  2. JSR 286 specs
  3. Session de portlet

Utilisation du paramètre de rendu public

Cette approche a été introduite dans JSR 286.

Dans JSR 168, rendu paramètres définis dans processAction d'un portlet sont disponibles que dans cet portlet.With les paramètres de rendu publique disposent, les paramètres de rendu définis dans le processAction d'un portlet seront disponibles en rendre d'autres portlets also.In afin de configurer ceci, pour tous les portlets supportant ceci:

Ajouter la <supported-public-render-parameter> , juste avant la fin de la balise du portlet dans portlet.xml

<security-role-ref>
    <role-name>user</role-name>
</security-role-ref>
<supported-public-render-parameter>{param-name}</supported-public-render-parameter>
</portlet>

Ajoutez la <public-render-parameter> juste avant la fin de la <portlet-app>

  <public-render-parameter>
    <identifier>{param-name}</identifier>
    <qname xmlns:x="localhost">x:{param-name}</qname>
  </public-render-parameter>
</portlet-app>

Dans la méthode processAction , la valeur du paramètre doit être définie dans la réponse

res.setRenderParameter({param-name},{param-value});

Après que nous en ayons fini avec la configuration de tout le portlet requis, après avoir exécuté la phase d’action du portlet concerné, le paramètre devrait être disponible en phase de rendu pour tous les portlets de la page, quelle que soit l’application. ).

Utilisation de la session de portlet

C'est une approche qui existe depuis la JSR 168. Elle nous permet de partager des attributs en utilisant une session de portlet. Une session de portlet peut avoir différents types de portées:

  1. Portée du portlet (attributs disponibles uniquement dans le portlet)
  2. Champ d'application (attributs disponibles dans l'application entière [war])

Pour utiliser cette approche, il n'est pas nécessaire de créer des entrées dans la configuration de portlet, car la session de portlet est facilement disponible dans la demande de portlet:

PortletSession session = renderRequest.getPortletSession();
session.setAttribute("attribute-name","attribute-value", PortletSession.APPLICATION_SCOPE);

ou

PortletSession session = renderRequest.getPortletSession();
session.setAttribute("attribute-name","attribute-value", PortletSession.PORTLET_SCOPE);

L'attribut ne peut être récupéré qu'à partir de la portée respective.Comme pour l'attribut défini dans la portée du portlet, nous devons le récupérer en utilisant

PortletSession session = renderRequest.getPortletSession();
String attributeValue = (String) session.getAttribute("attribute-name", PortletSession.PORTLET_SCOPE);

La principale limite de cette approche est le manque de partage entre autres portlet, en dehors de l' application scope.In pour y remédier, il est Liferay approche spécifique à ajouter <private-session-attributes > pour liferay-portlet.xml

    <private-session-attributes>false</private-session-attributes>
    <header-portlet-css>/css/main.css</header-portlet-css>
    <footer-portlet-javascript>/js/main.js</footer-portlet-javascript>
    <css-class-wrapper>{portlet-name}</css-class-wrapper>
</portlet>

pour tous les portlets, où les attributs sont définis et récupérés.

Utilisation de la fonction événementielle

Le mécanisme d'événement est une version étendue du paramètre de rendu public, avec une fonctionnalité supplémentaire permettant de transmettre des objets personnalisés à d'autres portlets, mais avec une surcharge de la phase d'événement.

Pour ce faire, ce mécanisme consiste à

  1. Portlet de l'éditeur
  2. Portlet de processeur (consommateur), les deux pouvant faire partie de différentes applications de portlet.

Commencer avec,

Ajouter la <supported-publishing-event> au portlet portlet.xml dans portlet.xml

    <security-role-ref>
        <role-name>user</role-name>
    </security-role-ref>
    <supported-publishing-event>
         <qname xmlns:x="http:sun.com/events">x:Employee</qname>
    </supported-publishing-event>
  </portlet>

Ajouter la <supported-processing-event> au portlet du processeur dans portlet.xml

<security-role-ref>
        <role-name>user</role-name>
    </security-role-ref>
    <supported-processing-event>
        <qname xmlns:x="http:sun.com/events">x:Employee</qname>
     </supported-processing-event>
</portlet>

Ajoutez la <event-definition> aux deux portlets, en définissant le nom de l'événement et tapez dans portlet.xml

<event-definition>   
  <qname xmlns:x="http:sun.com/events">x:Employee</qname>
  <value-type>com.sun.portal.portlet.users.Employee</value-type>
</event-definition>
   </portlet-app>

Ensuite, nous devons créer une classe pour le type d'événement (dans le cas d'un type personnalisé)

public class Employee implements Serializable {
  public Employee() {
  }
  private String name;
  private int userId; 

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getUserId() {
    return userId;
  }
  public void setUserId(int id)
  {
    this.userId = id;
  }

}

Désormais, dans le portlet de l'éditeur, l'événement doit être publié dans la phase d'action

    QName qname = new QName("http:sun.com/events" , "Employee");
    Employee emp = new Employee();
    emp.setName("Rahul");
    emp.setUserId(4567);
    res.setEvent(qname, emp);

Post nous avons publié l'événement, il doit être traité par le portlet de l'éditeur dans la phase de l'événement.

La phase d'événement a été introduite dans JSR 286 et est exécutée avant la phase de rendu du portlet, le cas échéant

@ProcessEvent(qname = "{http:sun.com/events}Employee")
public void processEvent(EventRequest request, EventResponse response) {

    Event event = request.getEvent();
    if(event.getName().equals("Employee")){
      Employee payload = (Employee)event.getValue();
      response.setRenderParameter("EmpName",
      payload.getName());
    }

}

qui peuvent ensuite être extraites du paramètre de rendu via la requête de rendu.



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