Diese Regel markiert die Verwendung der Sequenz "#{" in JSP-Dateien.
In JSP 2.1 ist die Syntax "#{}" jetzt ein reserviertes Schlüsselwort.
Wenn ältere JSP-Dateien, die die Sequenz "#{}" enthalten, in JSP 2.1 verwendet werden, generieren sie einen Fehler.
Damit die Sequenz "#{" erkannt wird, müssen die folgenden Bedingungen erfüllt sein:
- Die Servletversion (in web.xml) muss 2.4 oder höher sein.
- Für die Seite ist keine Anweisung isELIgnored="true" gesetzt.
- Die Seite wird keinem <url-pattern> in einer <jsp-property-group> (über <jsp-config> in web.xml) zugeordnet, wenn <el-ignored>
auf "true" gesetzt ist.
- Der Eintrag "#{" befindet sich im Text einer JSP-Schablone.
- Der Eintrag ist in einem Tag enthalten, der kein JSF-Tag (Java Server Faces) ist.
Die Regel erkennt die JSF-Tags, indem sie das Tag-Präfix mit der Liste der Präfixe vergleicht, die in der Regeleigenschaft "Bypass-Tags, die diese Präfixe verwenden" bereitgestellt werden.
Die Standardwerte der umgangen JSF-Präfixe sind:
h,f,ui,facelet,composite,comp,ez.
Beachten Sie die folgenden Punkte:
- Der Benutzer muss alle weiteren JSF-Präfixe, die in seiner Anwendung definiert sind, hinzufügen, damit diese Tags ignoriert werden.
- Der Benutzer muss alle Einträge aus dem Präfixparameter entfernen, wenn das jeweilige Präfix zwar in den JSP-Seiten verwendet wird, aber nicht für ein JSF-Tag.
- Wenn ein Präfix in manchen Fällen als JSF-Präfix und in anderen Fällen als normales JSP-Tag verwendet wird, darf der Benutzer das Präfix nicht in die Parameterliste einschließen und muss jede generierte Ergebnis manuell überprüfen.
Eine automatische Korrektur wird das Escape-Zeichen vor der #{-Syntax hinzufügen.
Beispiel:
|
<h1>This is an example of template text that will be detected: #{detected}</h1>
|
Die automatische Korrektur ändert diesen Code in:
|
<h1>This is an example of template text that will be detected: \#{detected}</h1>
|
Es auch verschiedene Möglichkeiten zum Inaktivieren der EL-Syntax (Expression Language):
- Seitenweise für alle EL-Ausdrücke: der Entwickler kann das Attribut isELIgnored der JSP-Seitenanweisung angeben und den Attributwert auf "true" setzen
Beispiel:
|
<%@ page isELIgnored ="true" %>
|
Dadurch werden alle EL-Ausdrücke für diese Seite inaktiviert (d. h. alle
${exp} and #{exp}
)
- Über die Einstellung der JSP-Eigenschaftsgruppe in web.xml: Der Entwickler kann basierend auf einem bestimmten URL-Muster
die EL für eine einzelne Seite oder für mehrere Seiten inaktivieren, indem er das Element "el-ignored" auf "true" setzt.
Zum Beispiel:
< span class="Code"> < JSP-Eigenschaftsgruppe>
< Url-Muster> *.jsp < /url-Muster>
< el-ignored> true < /el-ignored>
</jsp-property-group>
|
- Über die Einstellung der JSP-Eigenschaftsgruppe in web.xml, mit der Sie nur die verzögerte EL-Syntax inaktivieren können (#{})
Zum Beispiel:
< span class="Code"> < JSP-Eigenschaftsgruppe>
< Url-Muster> *.jsp < /url-Muster>
< deferred-syntax-allowed-as-literal> true < /deferred-syntax-allowed-as-literal>
</jsp-property-group> |
- Seitenweise ausschließlich für verzögerte EL-Syntax durch Setzen des Attributs deferred-syntax-allowed-as-literal der JSP-Seitenanweisung auf "true"
Beispiel:
|
<%@ page deferredSyntaxAllowedAsLiteral="true" %>
|
Anmerkung zur Priorität:
Die Attribute isELIgnored und deferredSyntaxAllowedAsLiteral der Seitenanwendung haben Vorrang vor den entsprechenden Elementen und Werten in web.xml.
Diese Seitenanwendungsattribute überschreiben die Werte der entsprechenden Element in web.xml.
Weitere Informationen finden Sie unter: