JSP EL + jQuery "$ .ajax ()" проблема - PullRequest
1 голос
/ 05 сентября 2010

У меня простая JSP:

<jsp:directive.attribute name="severity" type="java.lang.String" required="true"/>
<jsp:directive.attribute name="currentSeverity" type="java.lang.String" required="true"/>

<c:if test="${severity ne currentSeverity}">
    <c:url value="/session" var="url">
        <c:param name="severity" value="${severity}"/>
    </c:url>
    <li><a href="#" onclick="$.ajax({
        type: 'GET',
        url: '${url}',
        success: function() {
            window.location.reload();
        }
    });"><c:out value="${severity}"/></a></li>
</c:if>

Но когда я оцениваю это, двигатель сервлета бросает:

org.apache.jasper.JasperException:
  /WEB-INF/tags/severity-position.tagx(17,9) PWC6287: 
  The attribute prefix success does not correspond to any imported tag library

Каким-то образом механизм JSP считает, что строка $.ajax({...}); является выражением JSP EL (независимо от того, какие символы расположены между $ и {). Когда я ставлю обратную косую черту { или $, все в порядке, но тогда моя IDE думает, что этот код не работает с кодом JS.

Итак, почему движок JSP считает, что $.ajax({...}) является выражением JSP EL?

1 Ответ

1 голос
/ 05 сентября 2010

Это действительно похоже на ошибку в реализации EL, используемой рассматриваемым сервлет-контейнером (или веб-приложением). Вам нужно выяснить, какой из них он использует, и попробовать обновить / заменить его.

Если обновление / замена реализации EL не помогает, тогда я настоятельно рекомендую переместить весь этот скрипт в функцию в своем собственном файле .js, который вы загружаете с помощью <script> в HTML <head> элемент. Это тоже нормальная практика. Более того, я бы дал ссылке имя класса, чтобы вы могли просто подключить ее во время $(document).ready() и добавить click() соответственно. Э.Г.

<a href="${url}" class="someName">

с

$(document).ready(function() {
    $('.someName').click(function() {
        $.ajax({
            type: 'GET',
            url: $(this).attr('href'), // This sets the actual value of ${url}.
            success: function() {
                window.location.reload();
            }
        });
        return false; // Blocks link from executing the default href action.
    });
});
...