Mappeur de fonction

L’EL JSP permet les références aux fonctions dans les expressions sous la forme <préfixe>:<nomLocal>(…). Les gestionnaires d’expression basés sur l’’EL JSP délèguent la résolution de ces références aux fonctions à un mappeur de fonction. Dans le langage Java, le mappeur de fonction est une implémentation de l’interface javax.servlet.jsp.el.FunctionMapper. Le mappeur de fonction est chargé de résoudre un préfixe et un nom local en fonction Java statique (une instance de java.lang.reflect.Method) que le gestionnaire d’expression peut appeler dans le cadre de l’évaluation d’expression.

Le bloc de création Expression Manager fournit une implémentation de mappeur de fonction correspondant à un service OSGi, déployé comme partie du regroupement Expression Manager. L’implémentation crée un registre de fonctions, en demandant aux autres regroupements déployés dans le même conteneur CRX les fonctions exportées pour une utilisation à l’intérieur d’expressions. Le préfixe et le nom local fournis au mappeur de fonction doivent pouvoir être résolus sur l’une des fonctions figurant dans ce registre agrégé. Expression Manager prend en charge deux types de fonctions que les regroupements peuvent exporter :
  • Fonctions distantes : elles sont résolues sur des méthodes déclarées sur les interfaces implémentées par des beans. Les regroupements hôte exportent les beans comme services OSGi et également sur Flex Remoting. Les fonctions distantes peuvent être appelées à la fois depuis :
    • Expression Manager côté serveur, car il est déployé dans le même conteneur CRX.

    • Expression Manager côté client, car ces fonctions sont exposées sur Flex Remoting.

    Les fonctions distantes utilisent des préfixes commençant par le mot-clé « REMOTE_ ».

  • Fonctions locales : ces fonctions sont locales au moteur d’exécution dans lequel les expressions sont évaluées. Dans le langage Java, ces fonctions correspondent à des fonctions statiques définies sur des classes Java. Dans Flex, ces fonctions correspondent à des méthodes normales définies sur des classes ActionScript. L’implémentation Expression Manager suppose des fonctions locales symétriques pour lesquelles une implémentation existe à la fois dans le langage Java et dans Flex.

    Par exemple, il peut exister une fonction logique « str:substring(…) » pour laquelle l’implémentation Java est une méthode « substring » définie sur une classe Java « com.adobe.exm.java.StringUtils ». En revanche, l’implémentation Flex est une méthode « substr » définie sur une classe ActionScript « com.adobe.exm.flex.StringUtilities ».

Tout préfixe qui ne commence pas par le mot-clé « REMOTE_ » est supposé correspondre à une fonction locale. Le mappeur de fonction Expression Manager peut gérer les deux types de fonctions et les distingue selon le préfixe de fonction, qui commence par le mot-clé « REMOTE_ » ou non. Ce mappeur de fonction n’est pas disponible en tant que classe publique que vous pouvez utiliser dans les contextes Spring. Au lieu de cela, il s’agit d’un service OSGi hébergé par le regroupement Expression Manager qui doit être importé dans les contextes Spring personnalisés d’utilisation de regroupements via BluePrint :
<bp:reference id="<mapper_id> " 
    interface="javax.servlet.jsp.el.FunctionMapper" 
filter="(exm.function.mapper.id=lc.exm.compositeFunctionMapper)"/>

Le service importé peut ensuite être injecté dans le bean DefaultEXPEvaluator configuré dans le contexte Spring personnalisé en utilisant <id_mappeur> comme référence.