【问题标题】:jstl <c:if> tags not working in jsp file, getting error in tomcat 7jstl <c:if> 标签在 jsp 文件中不起作用,在 tomcat 7 中出现错误
【发布时间】:2012-07-19 09:33:25
【问题描述】:

我在 jsp 文件中使用 jstl 标记 &lt;c:if&gt; 时遇到问题。基本上我应该把它作为 2 个问题,尽管它们是相关的。

第一个问题:

在我的 WEB-INF/lib 中,我放了一个 jstl 1.2.jar

在我的 jsp 文件中,我输入了 &lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%&gt;

在我的 jsp 文件中,我使用 &lt;c:if&gt; 来做一些事情。如果条件为真,则会显示一些特殊信息

基本上&lt;c:if&gt; 中的内容不起作用,因为即使条件为真,消息也不会显示。

但如果我改用旧的命名空间,&lt;%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%&gt;。其他的没有改变,那么if标签就起作用了,因为if标签里面的信息显示出来了。

我的第一个问题是为什么我必须在命名空间中使用 /jstl 而不是 /jsp/jstl。我正在使用jstl1.2.jar。所以我应该为 1.2 使用较新的 uri。但是,较旧的 uri 有效,但较新的 uir 无效。

第二个问题:

我忽略了我遇到的第一个问题,只是使用 /jstl 作为我的命名空间,因为它使我的 Web 应用程序按照我想要的方式工作。但是,当我将 Web 应用程序部署到 tomcat 7.X 时,它会显示以下异常:

org.apache.jasper.JasperException:/mywebapp.jsp(行:35,列:10) 根据标签文件中的 TLD 或属性指令,属性测试 不接受任何表达 org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)

在/mywebapp.jsp line:35, column:10,即标签。

如果我将命名空间从 更改为 ,可以成功部署到tomcat,但是标签里面的功能没有用。 &lt;c:if&gt; 标签之外的其他代码虽然有效。

所以我很困惑,很想知道如何解决这个问题。

顺便说一句,我使用的是 servlet 2.5、jsp 2.0、jstl 1.2。我确实尝试将 jsp2.0 升级到 jsp2.1 以查看是否可以解决第一个问题,但我不知道如何升级 jsp 版本。

【问题讨论】:

  • 我冒昧地猜测您的 if 语法不正确。我建议发布您的代码,以便我们查看。

标签: java jsp tomcat jstl tomcat7


【解决方案1】:

但如果我改用旧的命名空间,&lt;%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%&gt;。其他的没有改变,那么if标签就起作用了,因为if标签里面的信息显示出来了。

如果您在 /WEB-INF/lib 中有 JSTL 1.0 的 standard.jar,就会发生这种情况。摆脱它。另见our JSTL wiki page。顺便说一句,我假设您没有触及 Tomcat 和 JRE 自己的 /lib 文件夹,并且没有在其中删除任何与 JSTL 相关的 JAR,或者在不小心尝试解决问题时提取了 JSTL JAR 的内容。


顺便说一句,我使用的是 servlet 2.5、jsp 2.0、jstl 1.2。我确实尝试将 jsp2.0 升级到 jsp2.1 以查看是否可以解决第一个问题,但我不知道如何升级 jsp 版本。我对编程很陌生。

您绝对不应该自己在/WEB-INF/lib 中提供任何Servlet 或JSP 库。 servlet 容器(在您的情况下是 Tomcat)已经随它一起提供。另见How do I import the javax.servlet API in my Eclipse project?

您只需要确保您的 web.xml 根声明符合您的 servlet 容器支持的任何内容。 Tomcat 7 is a Servlet 3.0 compatible container,所以您的 web.xml 根声明应如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<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">

    <!-- Config here. -->

</web-app>

【讨论】:

    【解决方案2】:

    我今天遇到了这个问题,我只是按照下面的描述让它工作。我不知道这个解决方案是否适合所有人,但它确实对我有用。我是java新手,所以它可能不是最好的解决方案。

    STL JSP 错误修复 - JSTL 的 Jar 文件位置

    1。 改变 到:

    2。 下载下面的jar文件和 将它们复制到…/WEB-INF/lib 文件夹。

    https://repo.maven.apache.org/maven2/jakarta/servlet/jsp/jstl/jakarta.servlet.jsp.jstl-api/1.2.7/jakarta.servlet.jsp.jstl-api-1.2.7.jar

    https://repo.maven.apache.org/maven2/org/glassfish/web/jakarta.servlet.jsp.jstl/1.2.6/jakarta.servlet.jsp.jstl-1.2.6.jar

    【讨论】:

      猜你喜欢
      • 2011-07-04
      • 2014-01-31
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多