2

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

第一个问题:

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

在我的 jsp 文件中,我把这个<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>.

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

基本上里面的内容<c:if>不起作用,因为即使条件为真,消息也不会显示。

但是如果我改用旧的命名空间,<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>. 其他的没有改变,那么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 (line: 35, column: 10) 根据 TLD 或标记文件中的属性指令,属性测试不接受任何表达式 org.apache.jasper.compiler.DefaultErrorHandler.jspError( DefaultErrorHandler.java:42)

在 /mywebapp.jsp line:35, column:10 中,即 <c:if> 标记。

如果我将命名空间从 <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%> 更改为 <%@ taglib prefix="c" uri="http:// /java.sun.com/jsp/jstl/core"%>,可以成功部署到tomcat,但是<c:if>标签里面的功能没有用。标记之外的其他代码<c:if>虽然有效。

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

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

4

2 回答 2

3

但是如果我改用旧的命名空间,<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>. 其他没有改变,那么 if 标记正在工作,因为 if 标记内的消息显示。

如果您standard.jar/WEB-INF/lib. 摆脱它。另请参阅我们的 JSTL wiki 页面。顺便说一句,我假设您没有触及 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)已经随它一起提供。另请参阅如何在我的 Eclipse 项目中导入 javax.servlet API?

您只需要确保您的web.xml根声明符合您的 servlet 容器支持的任何内容。Tomcat 7 是与 Servlet 3.0 兼容的容器,因此您的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>
于 2012-07-20T14:40:50.237 回答
0

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

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

1. 将 <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> 更改为:<%@ taglib uri="http://java.sun.com/ jsp/jstl/core" 前缀="c" %>

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。罐

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

于 2021-03-01T00:51:10.343 回答