Почему при экранировании кавычки в выражении el JSTL я получаю сообщение об ошибке «атрибут для» JSP не завершается должным образом? - PullRequest
0 голосов
/ 18 мая 2018

Я работаю на Mac более 8 лет и хотел дать Windows 10 еще один шанс.Поэтому я зарегистрировал все свои проекты в GitHub на Mac, а затем синхронизировал проекты на моем компьютере с Windows 10.

Как только я запустил проект в NetBeans и перешел на определенные страницы JSP, я получил следующую ошибку:.

18 мая 2018 г. 09: 46: 24.335 SEVERE [http-nio-8084-exec-27] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service () для сервлета[jsp] в контексте с путем [/ Project] выдал исключение [/WEB-INF/tags/config.tag (строка: 46, столбец: 34) для атрибута «не завершен должным образом] с основной причиной org.apache.jasper.JasperException: /WEB-INF/tags/config.tag (строка: 46, столбец: 34) атрибут для "не завершен должным образом

В указанной строке у меня есть следующее ...

<c:when test="${storageType == \"boolean\"}">

И хотя я мог бы изменить его на следующее ...

<c:when test="${storageType == 'boolean'}">

У меня есть много мест в моих тегах и JSP, где я избежал цитаты ("), я надеваюне понимаю, почему я должен изменить это. Мой проект работает в производстве как есть, поэтому я нехочу без необходимости трогать файлы JSP / tag.

На моем Mac, который использует JDK 1.8.0_102, он работает нормально

На моем Windows 10, который использует JDK 1.8.0_172, это не такработает

Я использую NetBeans с вышеупомянутыми JDK.

Tomcat в Windows = 8.0.27.0

Tomcat в Mac = 8.0.23.0

ОБНОВЛЕНИЕ

Это работает ..

<c:if test="${key == 'testing'}">
    <div>TESTING-A</div>
</c:if>

Это НЕ работает ...

<c:if test="${key == \"testing\"}">
    <div>TESTING-A</div>
</c:if>

Последнее вызывает ошибку на runtime

[/ WEB-INF / tags / config.tag (строка: 27, столбец: 12) атрибут для «неправильно завершен] с первопричиной org.apache.jasper.JasperException:/WEB-INF/tags/config.tag (строка: 27, столбец: 12) атрибут для "неправильно завершен.

Я отмечаю, что столбец 12 - это первая цитата…

Чтобы было ясно, выход из выражения JSTL, кажется, является основной причиной - но почему он не работает на более новом Tomcat?

1 Ответ

0 голосов
/ 18 мая 2018

Если ваша storageType переменная действительно является логическим значением, вы можете проверить это следующим образом:

<c:if test="${storageType eq false}">

Если, однако, это просто строка со значением 'false', вы должны выполнить сравнение строк:

<c:if test="${storageType eq 'false'}">

Учитывая ваш конкретный пример, вы можете сделать что-то вроде этого:

<c:when test="${storageType eq true || storageType eq false}">

или для сравнения строк

<c:when test="${storageType eq 'true' || storageType eq 'false'}">

Но вы действительно должны сначала выполнить первые проверкичтобы увидеть, действительно ли ваша переменная имеет логический тип, а не просто строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...