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

I have problem using jstl tag <c:if> in jsp file. Basically I should make this as 2 questions although they are related.

The first question:

In my WEB-INF/lib, I put a jstl 1.2.jar

In my jsp file, I put this <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>.

In my jsp file, I use the <c:if> to do something. If the condition is true, it will shows some special message

Basically the contents inside <c:if> is not working, because the message is not shown even the condition is true.

But if I changed to use the older namespace, <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>. Others are not changed, then the if tag is working, because the message inside the if tag is shown.

My first question is why I have to use /jstl instead of /jsp/jstl in namespace. I am using jstl1.2.jar. so I am supposed to use the newer uri for 1.2. however, older uri works but not newer uir.

The second question:

I ignore the first question I have, and just use /jstl as my namespace just because it makes my web app work the way I want. However, when I deploy my web app into tomcat 7.X, it shows exceptions as the following:

org.apache.jasper.JasperException: /mywebapp.jsp (line: 35, column: 10) According to TLD or attribute directive in tag file, attribute test does not accept any expressions org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)

in /mywebapp.jsp line:35, column:10, that is < c:if> tag.

If I change the namespace from <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%> to <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>, it can deploy in tomcat successfully but the functionality inside of < c:if> tag is not useful. other codes outside of <c:if> tag work though.

So I am very confused and really want to know how to fix this.

By the way, I am using servlet 2.5, jsp 2.0, jstl 1.2. I did try to upgrade the jsp2.0 to jsp2.1 in order to see if I can fix the first problem, but I have no idea how to upgrade jsp version.

Answers


But if I changed to use the older namespace, <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>. others are not changed, then the if tag is working, because the message inside the if tag is shown.

That can happen if you have a standard.jar of JSTL 1.0 in the /WEB-INF/lib. Get rid of it. See also our JSTL wiki page. I by the way assume that you've untouched Tomcat's and JRE's own /lib folders and have not dropped any JSTL-related JARs in there, or have extracted the JSTL JAR's contents in a careless attempt to solve the problem.


By the way, I am using servlet 2.5, jsp 2.0, jstl 1.2. I did try to upgrade the jsp2.0 to jsp2.1 in order to see if I can fix the first problem, but I have no idea how to upgrade jsp version. I am very new to programming.

You should absolutely not provide any Servlet or JSP libraries in /WEB-INF/lib yourself. The servlet container (in your case, Tomcat) already ships with it. See also How do I import the javax.servlet API in my Eclipse project?

You only need to make sure that your web.xml root declaration complies whatever your servlet container supports. Tomcat 7 is a Servlet 3.0 compatible container, so your web.xml root declaration should look like this:

<?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>

Need Your Help

Best way to connect to SQL Server 2012 remotely from a C# app

c# sql sql-server-2012

I'm writing a simple C# program and want to use an SQL server to store entries from a few users. It works fine locally but I haven't been able to connect using TCP. I setup remote connections and