Подтвердить что ты не робот

JSP: выражение EL не оценивается

У меня есть страница 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 работает, но выход не работает. Любая помощь, которую может дать любой, будет отличной.

4b9b3361

Ответ 1

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

<%@ page isELIgnored="false" %> 

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

Ответ 2

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

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

Одна разница заключалась в том, что я использовал архетип maven webapp для создания структуры проекта. Он создал файл 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>

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

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

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

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

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

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

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

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

Ответ 3

Это заголовок в web.xml, который вызывает проблему

Ниже сгенерированного заголовка maven останавливается EL от eval'ed.

<!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">

Ответ 4

Обязательно укажите соответствующие пространства имен в файле 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.

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

Используйте tomcat6. Это не требует какой-либо конфигурации для EL в web.xml.

Ответ 9

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

@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