我在jsp文件中使用jstl标记<c:if>
时遇到问题。基本上我应该将它作为2个问题,尽管它们是相关的。
在我的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。所以我应该使用更新的uri 1.2。然而,年长的uri工作但不是更新的uir。
我忽略了我的第一个问题,只使用/ jstl作为我的命名空间只是因为它使我的网络应用程序按我想要的方式工作。但是,当我将我的Web应用程序部署到tomcat 7.X时,它会显示以下异常:
org.apache.jasper.JasperException:/mywebapp.jsp(第35行,第10列) 根据标签文件中的TLD或属性指令,属性测试 不接受任何表达 org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)
在/mywebapp.jsp中:35,列:10,即&lt; C:如果&GT;标签
如果我从&lt;%@ taglib prefix =“c”uri =“http://java.sun.com/jstl/core”%&gt;更改命名空间to&lt;%@ taglib prefix =“c”uri =“http://java.sun.com/jsp/jstl/core”%&gt ;,它可以在tomcat中成功部署但是&lt; C:如果&GT;标签没用。 <c:if>
标记之外的其他代码可以正常工作。
所以我很困惑,真的想知道如何解决这个问题。
顺便说一句,我使用的是servlet 2.5,jsp 2.0,jstl 1.2。我确实尝试将jsp2.0升级到jsp2.1以查看是否可以解决第一个问题,但我不知道如何升级jsp版本。
答案 0 :(得分:3)
但如果我改为使用较旧的命名空间
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
。其他没有更改,那么if标签正在工作,因为if标签内的消息显示出来。
如果standard.jar
中有/WEB-INF/lib
的JSTL 1.0,就会发生这种情况。摆脱它。另见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>
答案 1 :(得分: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" prefix="c" %>
2. 下载以下 jar 文件和 将它们复制到.../WEB-INF/lib 文件夹。