簡體   English   中英

jstl<c:if> 標簽在 jsp 文件中不起作用,在 tomcat 7 中出錯

[英]jstl <c:if> tags not working in jsp file, getting error in tomcat 7

我在 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。 所以我應該為 1.2 使用較新的 uri。 但是,較舊的 uri 有效,但較新的 uri 無效。

第二個問題:

我忽略了我的第一個問題,只是使用 /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版本。

但是如果我改為使用舊的命名空間, <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%> 其他人未更改,則 if 標記正在工作,因為顯示了 if 標記內的消息。

如果您在/WEB-INF/lib有一個 JSTL 1.0 的standard.jar .jar,就會發生這種情況。 擺脫它。 另請參閱我們的 JSTL 維基頁面 順便說一下,我假設您沒有觸及 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>

我今天遇到了這個問題,我剛剛讓它按照下面的描述工作。 我不知道這個解決方案是否適合每個人,但它確實對我有用。 我是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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM