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.
See Question&Answers more detail:
os