Cette règle marque l'utilisation de la séquence '#{' dans les fichiers JSP.
Dans JSP 2.1, la syntaxe #{} correspond maintenant à un mot clé réservé.
Si des anciens fichiers JSP contenant la séquence #{} sont utilisés dans JSP 2.1, ils génèrent une erreur.
Pour que la séquence #{ soit détectée, les conditions suivantes doivent être remplies :
- la version du servlet (de web.xml) doit être 2.4 ou une version ultérieure,
- la page ne comporte pas de directive isELIgnored="true",
- la page n'est pas mappée à un élément <url-pattern> dans un élément <jsp-property-group> (à partir de <jsp-config> dans web.xml) avec <el-ignored> associé à la valeur true,
- l'entrée #{ se trouve dans un modèle de texte jsp,
- l'entrée se trouve dans une balise qui n'est pas une balise JSF (Java Server Faces).
La règle détecte les balises JSF en comparant le préfixe de balise à la liste des préfixes fournie dans la propriété de règle appelée "Ignorer les balises utilisant les préfixes suivants".
Les valeurs par défaut des préfixes JSF ignorés sont les suivantes:
h,f,ui,facelet,composite,comp,ez.
Notez les informations suivantes :
- l'utilisateur doit ajouter tout les autres préfixes JSF définis par son application pour que ceux-ci soient ignorés,
- l'utilisateur doit supprimer toute entrée du paramètre de préfixe si le préfixe est utilisé dans les pages JSP, mais pas pour une balise JSF,
- si un préfixe est utilisé en tant que préfixe JSF dans certains cas et en tant que préfixe JSP dans d'autres, l'utilisateur ne doit pas inclure le préfixe dans la liste des paramètres et doit examiner chaque résultat généré manuellement.
Une correction automatique ajoutera le caractère d'échappement avant la syntaxe #{.
Exemple :
|
<h1>This is an example of template text that will be detected: #{detected}</h1>
|
Le correctif automatisé remplacera ce code par le suivant :
|
<h1>This is an example of template text that will be detected: \#{detected}</h1>
|
Il y a également différentes façons de désactiver le langage d'expression :
- Sur une base "page par page" pour toutes les expressions du langage d'expression : le développeur peut spécifier l'attribut isELIgnored de la directive de page JSP et définir sa valeur à true
Par exemple :
|
<%@ page isELIgnored ="true" %>
|
Cette opération désactivera toutes les expressions EL pour cette page (c'est-à-dire toutes les
${exp} and #{exp}
)
- Via le paramètre de groupe de propriétés JSP dans web.xml : le développeur peut désactiver le langage d'expression pour une ou plusieurs pages selon un masque d'URL spécifique en définissant l'élément el-ignored à true
Par exemple :
< span class="Code"> < jsp-property-group>
< url-pattern> *.jsp < /url-pattern>
< el-ignored> true < /el-ignored>
</jsp-property-group>
|
- Via le paramètre de groupe de propriétés JSP dans web.xml pour désactiver seulement la syntaxe différée du langage d'expression (#{})
Par exemple :
< span class="Code"> < jsp-property-group>
< url-pattern> *.jsp < /url-pattern>
< syntaxe-différée-autorisée-comme-littéral> true < /syntaxe-différée-autorisée-comme-littéral>
</jsp-property-group> |
- Sur une base "page par page" seulement pour la syntaxe différée du langage d'expression en définissant l'attribut deferred-syntax-allowed-as-literal de la directive de page JSP à true
Par exemple :
|
<%@ page deferredSyntaxAllowedAsLiteral="true" %>
|
Remarque à propos des priorités :
Les attributs isELIgnored et deferredSyntaxAllowedAsLiteral de la directive de page ont priorité sur les éléments et leurs valeurs respectives de web.xml.
Ces attributs de directive de page remplacent les valeurs des éléments respectifs de web.xml.
Pour plus d'informations, voir :