Définition de symboles conditionnels
Dans la balise <symbolDefinitions>, vous pouvez définir un symbole conditionnel à l'aide de la balise
<conditionalSymbol>. Un symbole conditionnel représente une valeur acquise en évaluant une série
d'expressions conditionnelles. Si une expression renvoie true, l'associateur de demande utilise le membre pour calculer la valeur de retour. Lorsqu'un membre rencontre l'expression de condition, l'associateur de demande évalue une expression de retour correspondante et renvoie le résultat. Une fois que l'associateur de demande trouve un résultat à renvoyer, il n'évalue pas d'autres d'expressions.
- <name>
- Nom du symbole. Il s'agit d'une chaîne qui doit commencer par le caractère
$.
- <type>
- Type de la valeur renvoyée par le symbole. Entrez cette valeur sous la forme d'un nom de classe Java™ complet ou d'une primitive Java. La définition du type de symbole est facultative. S'il n'est pas défini, l'associateur de demande essaye d'établir le type de zone en fonction de l'expression. Si l'associateur de demande ne peut pas déterminer le type de symbole avant qu'il évalue l'expression, les performances sont affectées. Pour optimiser les performances, il est donc préférable de spécifier le type.
- <args>
- Arguments associés au symbole. Cette balise est facultative ; si elle est définie, des arguments doivent être fournis pour calculer le symbole. Pour plus d'informations, voir Définition des arguments de symbole.
- <if condition="expression">
- L'attribut
conditiondéfinit une expression de condition à calculer. L'expression doit renvoyer une valeur booléenne. Si la valeur esttrue, l'associateur de demande utilise le contenu de la balise <if> pour essayer de déterminer la valeur de retour. La balise <if> doit contenir l'un ou l'autre des contenus suivants, mais pas les deux :- Une balise <return>. Cette balise contient une expression. Si l'expression de condition est vraie, l'associateur de demande évalue l'expression et renvoie le résultat.
- N'importe quel nombre de balises <if> imbriquées dans la balise <if>. Si l'expression de condition est vraie, l'associateur de demande traite les balises <if> imbriquées de la même manière qu'une balise <if> de haut niveau. En d'autres termes, il calcule l'expression dans l'attribut
conditionet si l'expression est vraie, il utilise le contenu de la balise et tente de déterminer la valeur de retour.
Important : Si une valeur de retour est déterminée, l'associateur de demande n'évalue pas d'autres expressions. Cependant, si une expression de condition contenue dans une balise <if> est satisfaite mais qu'elle contient d'autres balises <if> imbriquées et qu'aucune des expressions de condition associées n'est vérifiée, l'agent ne renvoie alors aucune valeur. Dans ce cas, l'associateur de demande continue à évaluer les expressions suivantes.
- <defaultValue>
- Facultatif. Si l'associateur de demande a évalué toutes les expressions de condition, mais qu'aucune n'a renvoyé
true, l'associateur de demande évalue l'expression de la balise <defaultValue>. Le symbole conditionnel renvoie la valeur produite par l'expression. Si cette balise est absente, la valeur par défaut renvoyée estnull.
Exemple
<symbol>
<name>$GET</name>
<eval>"GET"</eval>
</symbol>
<symbol>
<name>$PUT</name>
<eval>"PUT"</eval>
</symbol>
<conditionalSymbol>
<name>$sessionAttribute</name>
<if condition="$httpServletRequest.getSession(false) != null>
<if condition="$httpServletRequest.getSession(false).getAttribute($GET) != null">
<return>$httpServletRequest.getSession(false).getAttribute($GET)</return>
</if>
<if condition="true">
<return>$httpServletRequest.getSession(false).getAttribute($PUT)</return>
</if>
</if>
</conditionalSymbol>
Ce symbole est supposé être une partie de l'associateur de demande de servlet. Tout d'abord, il vérifie si une session HTTP existe pour le servlet, sinon, le symbole renvoie null. Si une session est présente, le symbole vérifie si le servlet possède un attribut GET et renvoie la valeur de cet attribut. Sinon, il renvoie la valeur de l'attribut PUT. Si la deuxième expression de condition a pour résultat true, cette valeur est utilisée comme une clause else. Si la première condition est true, l'associateur de demande n'évalue pas d'autres expressions ; sinon, il poursuit vers la deuxième expression.