Nie używaj słów kluczowych języka Java w elementach języka wyrażeń JSP i JSF

Ta reguła oznacza elementy języka wyrażeń (Expression Language – EL) JSP, które uwzględniają zmienne o nazwach zawierających słowa kluczowe języka Java lub zastrzeżone słowa kluczowe języka wyrażeń.

Począwszy od wersji WebSphere Application Server 8 sprawdzanie poprawności procesora języka wyrażeń stało się bardziej rygorystyczne. Identyfikatory zmiennych języka wyrażeń są sprawdzane pod kątem obecności słów kluczowych języka Java lub zastrzeżonych słów języka wyrażeń. Jeśli identyfikator zmiennej używanej w skrypcie JSTL/EL uwzględnia słowa kluczowe języka Java lub zastrzeżone słowa języka wyrażeń, plik JSP nie zostanie poddany translacji i w czasie wykonywania zostanie zgłoszony wyjątek com.ibm.ws.jsp.translator.JspTranslationException.

Ta reguła oznaczy każdy element języka wyrażeń, który uwzględnia zmienne zawierające dowolne słowo z bieżącego zestawu zastrzeżonych słów kluczowych języka Java.

Ta reguła oznaczy również zastrzeżone słowa JSP używane w zmiennych.

Ten problem można rozwiązać, modyfikując kod JSP i Java tak, aby wyeliminować używane zastrzeżone słowa kluczowe. Jeśli taka zmiana jest zbyt czasochłonna, dostępna jest właściwość systemowa umożliwiająca przywrócenie zachowania obowiązującego przed wersją 8. Jako wartość właściwości systemowej maszyny JVM org.apache.el.parser.SKIP_IDENTIFIER_CHECK ustaw łańcuch true, aby przywrócić wcześniejsze zachowanie.

W poniższym przykładzie:
< span class="Code"> < span class= "indent2"> < /span> < c:if test=" ${not empty testObject}">
< span class= "indent2"> < /span> < c:choose>
< span class= "indent2"> < /span> < c:when test=" ${testObject.class.name eq 'SomeValue'}"> < /span>

Element języka wyrażeń ${testObject.class.name eq 'JakaśWartość'} zostanie oznaczony, ponieważ zmienna testObject.class.name zawiera słowo kluczowe języka Java class.

Jeśli nie zostanie to poprawione, wyrażenie wygeneruje błąd w czasie wykonywania podobny do poniższego:

< kod> Błąd aplikacji
SRVE0777E: Wyjątek zgłoszony przez klasę aplikacji 'com.ibm.ws.jsp.translator.visitor.validator.ELValidator.validateElFunction:515'
com.ibm.ws.jsp.translator.JspTranslationException: JSPG0122E: Nie można przeanalizować funkcji języka wyrażeń ${testObject.class.name eq 'JakaśWartość'}.

Jeśli przetwarzanie języka wyrażeń zostanie wyłączone, elementy w pliku JSP nie zostaną oznaczone.

Na przykład przetwarzanie języka wyrażeń jest wyłączone, gdy łańcuch true jest ustawiony jako wartość dyrektywy isELIgnored page. Reguła nie oznaczy elementów w pliku JSP oznaczonych tą dyrektywą.

< code> <% @ page isELIgnored= "true " %> < /code>

Przetwarzanie języka wyrażeń można również wyłączyć przy użyciu elementu web.xml el-ignored. W poniższym przykładzie plik webIgnored.jsp nie zostanie oznaczony przez tę regułę.

< konfiguracje-jsp>
< span class= "indent2"> < /span> < jsp-property-group>
<url-pattern>webIgnored.jsp</url-pattern>
<el-ignored>true (prawda)</el-ignored>
</jsp-property-group>
</jsp-config>

Przetwarzanie języka wyrażeń jest zawsze wyłączone w przypadku modułów WWW w serwlecie w wersji 2.3 lub niższej.

Informacje dodatkowe: