我在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