Вопрос

На этот вопрос уже есть ответ здесь:

У меня есть страница JSP, работающая на Tomcat 5.5.У меня есть следующий код:

 <c:forEach var="i" begin="1" end="10" step="1">
  <c:out value="${i}" />
  <br />
</c:forEach>

Результат, который я получаю:

${i} 
${i} 
${i} 
${i} 
${i} 
${i} 
${i} 
${i} 
${i} 
${i} 

Я не могу понять, почему цикл forEach работает, но результат не работает.Любая помощь, которую кто-либо может оказать, была бы великолепна.

Это было полезно?

Решение

Я знаю, что он должен быть включен по умолчанию, но время от времени я сталкиваюсь со страницами (или даже с одной и той же страницей, которая меняет поведение), где обработка EL не происходит.Добавление следующего текста в начало любой такой страницы должно решить проблему:

<%@ page isELIgnored="false" %> 

Я добавляю его на каждую страницу, потому что это не повредит, и я до сих пор не знаю основную причину, из-за которой страница иногда перестает интерпретировать выражения EL.

Другие советы

У меня была такая же проблема, и я потратил целую вечность, пытаясь понять, что не так.

Я разработал множество веб-приложений с нуля.Почему вдруг этот перестал сотрудничать?

Единственное отличие заключалось в том, что на этот раз я использовал архетип веб-приложения maven для создания структуры проекта.Он создал файл web.xml, который выглядел следующим образом:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
</web-app>

Как только я осознал, что это моя проблема, я был уверен, что у меня есть ответ.Поэтому я скопировал один из заголовков web.xml версии 2.5, перестроил и повторно развернул.Никакой сигары.Не мог поверить, что проблема не в этом.Очистил проект, перезапустил Tomcat.Неа.

Ответ RHSeeger побудил меня попытаться добавить страницу <%@ isELIgnored="false" %>.Это решило проблему.Но мне все равно хотелось знать, почему Эла с самого начала начали игнорировать.

Я решил, что el игнорируется из-за того, что что-то не так с моим web.xml, поэтому я внимательно изучил его по сравнению с web.xml другого веб-приложения, который, как я знал, работал нормально.Никаких заметных отличий.

Затем я удалил страницу <%@ isELIgnored="false" %> из моего JSP и повторно развернул ее, предполагая, что el не будет оцениваться снова, но, к моему большому удивлению, el был оценен нормально!

Затем, решив, что это, должно быть, какая-то проблема с кэшированием, я отменил изменения в файле web.xml, чтобы воссоздать проблему.Я выполнил повторное развертывание, но el по-прежнему оценивался правильно, даже с плохим web.xml.Затем я очистил весь свой проект (я использую разнесенное развертывание), удалил развернутый каталог и воссоздал его.Затем я перезапустил Tomcat.Тем не менее, похоже, что el оценивается правильно, несмотря на плохой файл web.xml.

Наконец меня осенило.Я просто добавил пробел в какое-то место JSP, переупаковал его и обновил страницу.Бинго!Теперь эль не оценивался.

Итак, проблема был с веб.xml.Это еще больше усложнялось бы тем фактом, что JSP не перекомпилировались, если они не были изменены.Не уверен, использует ли tomcat сумму MD5, чтобы решить, нужно ли перекомпилировать JSP или что-то в этом роде.Другая возможность заключается в том, что я использую плитки, которые, как я знаю, имеют механизм кэширования, но я бы не ожидал, что они выдержат перезапуск Tomcat.

В любом случае, если вы не измените свои JSP ПОСЛЕ исправления web.xml, все ставки на то, начнет ли EL снова работать, сняты.Надеюсь, это избавит кого-то от головной боли.Мне также интересно, может ли кто-нибудь сказать мне, был ли Tomcat не перекомпилировал JSP или плитки, кэширующие выходные данные JSP.Я почти уверен, что это перекомпиляция, потому что во время компиляции JSP должен выяснить, что делать с выражениями ${} el, верно?Тайлы на самом деле не могут кэшировать то, что подставляется в выражения el, иначе возникнут всевозможные проблемы.

Проблема возникает из-за заголовка в web.xml.

Ниже сгенерированный maven заголовок останавливает оценку EL.

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>

Используя приведенный ниже заголовок eval, вы можете использовать EL.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

Обязательно включите соответствующие пространства имен в файл web.xml.Просто попробуйте заменить

<web-app>

с чем-то вроде

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0"
  metadata-complete="true">

Это исправило это для меня.Вы можете найти правильные пространства имен для вашего экземпляра Tomcat в примерах приложений, поставляемых с установкой Tomcat.

Для тех, кто заинтересован, эквивалентный синтаксис XML для JSP 2.0:

<jsp:directive.page isELIgnored="false"/>

была аналогичная проблема с Кевином, я использовал maven, чтобы начать работу с веб-приложением, но не получил удовольствия от оценки выражений в jsp - мне пришлось удалить заголовок DOCTYPE - теперь все хорошо, не играя с битом isELIgnored - maven генерирует web.xml, который ссылается на 2.3, который как сказал Питер, EL отключен по умолчанию

Смотрите мой ответ на Javascript String.replace(/\$/,str) странно работает в файле jsp по возможным причинам.

Более длинный ответ:${i} — это выражение на так называемом «языке выражений».Иногда язык выражений можно отключить.См. выше ответ о возможных причинах и способах его включения.

Используйте tomcat6.Никакой настройки EL в web.xml не требуется.

От контроллера:

@RequestMapping(value = "createcustomer",method = RequestMethod.GET)
    public String customer(Model model)
    {
        Customer cus=new Customer();
        cus.setCustomerNumber("Test");
        model.addAttribute("customer",cus);
        return "createcustomer";
    }

Ввиду:

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 

<div class="cl">    
   <form:form commandName="customer" method="POST">

      <p>Name: <c:out value="${customer.CustomerNumber}"></c:out></p>

   </form:form>
<div>

Выход:

Name: Test
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top