Pergunta

Esta questão já tem uma resposta aqui:

Eu tenho uma página JSP em execução no Tomcat 5.5. Eu tenho o seguinte código:

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

A saída estou ficando é:

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

Eu não posso trabalhar fora porque o loop foreach está funcionando, mas a saída não está funcionando. Qualquer ajuda qualquer um poderia dar seria ótimo.

Foi útil?

Solução

Eu sei que é suposto ser ativada por padrão, mas eu correr em páginas de vez em quando (ou mesmo a mesma página que muda o comportamento), onde o processamento EL não acontece. Ao adicionar o seguinte ao topo de tais páginas deve resolver o problema:

<%@ page isELIgnored="false" %> 

Eu adicioná-lo a cada página, porque não dói, e eu ainda não sei a causa raiz que ocasionalmente faz com que uma página para parar de interpretar as expressões EL.

Outras dicas

Eu só tinha este mesmo problema e passou para sempre tentando descobrir o que estava errado.

Eu desenvolvi muitos aplicativos web a partir do zero. Por que de repente se este não cooperar?

Uma diferença foi desta vez eu usei o arquétipo webapp maven para gerar a estrutura do projeto. É criado um arquivo web.xml que ficou assim:

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

Depois que eu percebi que o meu problema, eu tinha certeza que eu tinha a resposta. Então eu copiei um dos meus cabeçalhos 2,5 web.xml, reconstruído, e reimplantado. Sem charuto. Não podia acreditar que não era o problema. Limpa o projeto, tomcat reiniciado. Não.

A resposta de RHSeeger me levou a tentar colocar no <% @ page isELIgnored = "false" %>. Isso resolveu o problema. Mas eu ainda queria saber por que el começou a ficar ignorado, para começar.

Eu percebi o el estava sendo ignorado por causa de algo de errado com meu web.xml, então eu inspecionado de perto em comparação com web.xml de outro webapp que eu sabia muito bem trabalhado. Não há diferenças visíveis.

Então eu removi o <% @ page isELIgnored =% "false"> do meu JSP, e reimplantado, assumindo o el não seria avaliada de novo, mas muito bem para minha surpresa, o el foi avaliada!

Então, imaginando que deve haver algum tipo de cache problema, eu desfiz minhas alterações para o web.xml para recriar o problema. I reimplantado, mas ainda assim o el estava sendo avaliada corretamente, mesmo com o mau web.xml. Então eu limpei toda a minha projeto (estou usando uma implantação explodiu), explodindo o diretório explodiu e recriá-lo. Eu, então, reiniciado tomcat. Ainda assim, o el parecia estar sendo avaliada corretamente, apesar do mau web.xml.

Por fim, ocorreu-me. Eu simplesmente adicionado um espaço para algum lugar na JSP, reembalado-lo, e atualizado a página. Bingo! Agora, o el não estava sendo avaliado.

Então, o problema foi com o web.xml. Seria ainda mais complicada pelo fato de que os JSPs não estavam sendo recompilados a menos que eles tinham mudado. Não tenho certeza se tomcat usa uma soma MD5 para decidir se os JSPs precisam ser recompilados ou o quê. Outra possibilidade é que eu estou usando telhas, que sei que tem um mecanismo de cache, mas eu não esperaria que para sobreviver um reinício tomcat.

De qualquer forma, a menos que você modifique seus JSPs após a fixação do web.xml, todas as apostas estão fora sobre se a EL vai começar a trabalhar novamente. Esperamos que esta salva alguém dor de cabeça. Eu também estou interessado se alguém pode me dizer se era tomcat não recompilar os JSPs ou telhas cache a saída do JSP. Tenho certeza de que é a recompilação, porque em tempo de compilação é quando o JSP deve ter que descobrir o que fazer com os $ {} el expressões, certo? Telhas não pode realmente cache o que é substituído nas expressões EL, caso contrário, iria surgir todos os tipos de problemas.

É o cabeçalho no web.xml que causa o problema

header Abaixo Maven gerado pára EL de ser 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>

Usando abaixo eval cabeçalho é a 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">

Certifique-se de incluir os espaços de nomes relevantes no web.xml. Basta tentar substituir

<web-app>

com algo como

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

Ele fixa-lo para mim. Você pode encontrar os espaços de nomes corretos para sua instância Tomcat nos exemplos de aplicativos que vêm com um Tomcat instalar.

Para os interessados, a sintaxe XML equivalente para JSP 2.0 é:

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

teve problema semelhante ao Kevin, eu usei Maven para começar a trabalhar com webapp, mas nenhuma alegria com avaliar expressões em jsp - eu tinha que remover cabeçalho DOCTYPE - tudo é bom agora sem jogar com isELIgnored mordeu - Maven gera web.xml quais links a 2.3, que como Pedro declarou tenha EL desativado por padrão

Veja a minha resposta em Javascript cadeia. replace (/ \ $ /, str) funciona estranhamente em arquivo jsp para possíveis motivos.

resposta mais longa: $ {i} é expressão no chamado 'Expression Language'. Às vezes, Expression Language pode ser desativado. Veja acima resposta por razões potenciais, e as formas como ativá-lo.

Use tomcat6. Ele não requer qualquer configuração de EL no web.xml.

De Controlador:

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

Em Vista:

<%@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>

Output:

Name: Test
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top