JSTL <c:if> 标记在 JSP 文件中不起作用,在 Tomcat 7 中出错



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

第一个问题:

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

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

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

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

但如果我改为使用旧的名称空间<%@ 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.jasper.Exception:/mywebapp.jsp(行:35,列:10)根据TLD或标签文件中的属性指令,进行属性测试不接受任何表达式org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)

在/mywebapp.jsp中,行:35,列: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版本。

但是如果我改为使用旧的名称空间<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>。其他标记没有更改,则if标记有效,因为显示了if标记内的消息

如果/WEB-INF/lib中有JSTL 1.0的standard.jar,则可能会发生这种情况。去掉它。另请参阅我们的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.servletneneneba API?

您只需要确保web.xml根声明符合servlet容器支持的任何内容。Tomcat7是一个与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>

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

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

1。改变<%@taglib uri=";http://java.sun.com/jstl/core"前缀=";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.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

最新更新