Posted on juillet 29th, 2010 by admin

1 Comment

Les OGNL et STRUTS 2

I – Introduction

OGNL pour Objet Graph Navigation Language est un langage couche vue permettant d’interagir avec les objets ou instances java. Ce langage offre une très grande souplesse d’accès aux objets ou aux properties du context.

OGNL permet d’accéder aux objet selon leur portée, il peut lire des collections.

En struts2 lorsque nous voulons accéder aux propriétés d’un objet nous utilisons couramment la balise

<s :property value="MonObjet.maPropriete" />

. Nous pouvons également faire des tests comme ceci

<s :if test="MonObjet.maPropriete != null">c'est nul !</s>

L’OGNL nous permet ce même type de manipulation. Nous aurons

<s :property value="%{MonObjet.maPropriete}"/>

. L’EL expression correspondante pouvant être :

<c :out value="${utilisateur.mailUser}" />

II – Portée des OGNL

o #application

Nous pouvons accéder aux objets situés dans le context de l’application (ServletContext), par exemple dans le web.xml grace à l’opérateur #application.cle

exemple :

< ?xml version="1.0" encoding="UTF-8"?>
<web -app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
	<context -param>
		<description>Chemin d'accès aux images</description>
		<param -name>cheminImage</param>
		<param -value>http://localhost:8080/monAppication/img/</param>
	</context>
</web>

nous accèdons à cette information de différentes manières :

<s :property value="#application.cheminImage"/>
<s :property value="%{#application.cheminImage}"/>

o #session

Nous pouvons également récupérer les attributs présents dans la session :

               Map<string , Object> session = ActionContext.getContext().getSession(); 
 
              // génération de la liste des roles
 
		session.put("uneListe", listeRoles);
 
 
 
</string>

- Récupérer le 1er item de liste :

<s :property value="%{#session.listeRoles[1]}"/>

- Récupérer toute la liste :

<s :property value="%{#session.listeRoles[1]}"/>

- Itérer sur une liste

<s :iterator value="%{#session.listeRoles}">
<s :property />
</s>

o #request

Nous pouvons récupérer les attributs présent dans la requète courante :

<s :property value="%{#request.UnParametrePasseParGet}"/>

ou tout autre chose :

<s :property value="%{#request.locale}"/>

o #attr

grace à cet notation nous pouvons récupérer un attribut respectivement dans le scope REQUEST,SESSION et APPLICATION

<s :property value="%{#attr.utilisateur.nom}"/>

équivalent à

<s :property value="utilisateur.nom"/>

En général on utilise le caractère # lorsque les paramètres ne sont pas chargés par la pile d’action struts 2. Si cette pile est renseignée nous pouvons nous en passé.

o Accès à une méthode de classe d’action

Dans la classe d’action courante :

	public String getAffiche() {
		toto ="resultat";
		return toto;
	}
<s :property value="%{getAffiche()}"/>

o Accès à une méthode static de classe

Pour accéder à ce type de méthode il est nécessaire de positionner à true dans le struts.xml l’accès aux ressources statiques.

<constant name="struts.ognl.allowStaticMethodAccess" value="true" />

la classe Java :

package utilitaires;
 
public class ApplicationParametres {
 
	public static String getAffiche() {
		String toto ="toto";
		return toto;
	}	
 
}

l’appel de la méthode statique

<s :property value="%{@utilitaires.ApplicationParametres@getAffiche()}"/>

One Response to “Tags, expressions OGNL et EL expressions avec Struts 2 – accès, portée, utilisation.”


  1. Zouhair

    5 months ago

    Un grand Merci. :D

Leave a Reply