【问题标题】:JSTL variables are not shown in EL [duplicate]JSTL变量未在EL中显示[重复]
【发布时间】:2012-03-29 10:00:51
【问题描述】:

JSTL 变量值不显示在 EL 中。例如这段代码:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="s" uri="http://www.springframework.org/tags" %>
<html>
<body>
  <c:forEach var="i" begin="1" end="5" >
    <c:out value="${i}" /> 
  </c:forEach>
</body>
</html>

浏览器呈现如下:${i} ${i} ${i} ${i} ${i}

或者这个:

<c:set var="someVar" value="Hello"/>
<c:out value="${someVar}"/>

浏览器显示:${someVar}

我正在使用 Spring-MVC 3 和 Maven 构建示例项目,并将其部署到 Tomcat 7。 在 Spring 的上下文中,我的视图解析器配置如下:

<bean class=
    "org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="
        org.springframework.web.servlet.view.JstlView"></property>
    <property name="prefix" value="/WEB-INF/"></property>
    <property name="suffix" value=".jsp" />
</bean>

从 Spring 的控制器传递的模型变量也未显示。

Mavens pom.xml 具有以下 jstl 相关依赖项:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.1</version>
    <scope>provided</scope>
</dependency>

那么,有什么建议可以解决这个问题吗?

【问题讨论】:

    标签: java jsp spring-mvc jstl el


    【解决方案1】:

    那么,EL(那些${} 的东西)不会被执行?当您的 servletcontainer 以 Servlet 2.3 / JSP 1.2 或更低版本运行,而您使用 JSTL 1.1 或更高版本时,可能会发生这种情况。在从 JSTL 1.0 到 1.1 的更改期间,EL 从 JSTL 移到了 JSP。那是 JSP 2.0,它是 Servlet 2.4 的一部分。 JSP 1.2 和更早版本没有捆绑 EL。 JSTL 1.1 和更高版本没有捆绑 EL。

    您需要确保您的 web.xml 根声明至少符合 Servlet 2.4。当您使用 JSP 2.1(它是 Servlet 2.5 的一部分)时,您的目标显然是与 Servlet 2.5 兼容的容器。因此,请确保您的 web.xml 根声明符合 Servlet 2.5:

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

    然而,Tomcat 7 是一个与 Servlet 3.0 兼容的容器。我会考虑更改 maven pom 以声明 Servlet 3.0 / JSP 2.2,以便您可以受益于所有新的 Servlet 3.0 功能。

    另见:

    【讨论】:

    • 非常感谢!这个声明有帮助。这是否意味着我不应该关心 lib 中任何与 jstl 相关的 jar,因为我使用的是 Servlet 2.5 兼容的 Web 容器?
    • 取决于目标容器。例如,Tomcat 不附带 JSTL。所以你仍然需要 JSTL JAR。另请参阅“我们的 JSTL wiki 页面”链接。请注意,Tomcat 7 与 Servlet 3.0 兼容。但是您在 maven pom 中使用的是 JSP 2.1 而不是 JSP 2.2,因此您实际上可能针对的是 Servlet 2.5 生产环境。
    猜你喜欢
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多