jstl 错误According to TLD or attribute directive in tag file, attribute value does not ac

jsp编译的时候失败,原因是servlet版本与jstl标签库的jar的版本不匹配。

严重: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: /index.jsp(22,37) According to TLD or attribute directive in tag file, attribute value does not accept any expressions

 

 

  环境: win2003 tomcat 5.5 JDK1.6  
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi= http://www.w3.org/2001/XMLSchema-instance
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
</web-app>
jsp 代码:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>   

1+2+3 = ${1+2+3} <br>   

1+2+3 = <c:out value="6" /> <br>

此时执行没有任何问题。

 1+2+3 = <c:out value="${1+2+3}" />执行时就会出现:

According to TLD or attribute directive in tag file, attribute value does not accept any expressions

昨天少了一个jsp,所以一直出现问题。

代码

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    

写成   

<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %>  

今天再试。发现JSTL1.1可以用。但是用JSTL1.0时,出现问题。

就是把JSTL1.1的库放到/WEB-INF/lib/ 下。

刚开始我是netbeans 5.5.1中的JSTL库拷贝出来发现可以用。后来用jstl1.1.2的库,也是可以用。

总结:

JSTL1.1的库 在JSP2.0(Servlet 2.4)及以后(推荐用JSTL1.1及以上)用:

代码

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4"

         xmlns="http://java.sun.com/xml/ns/j2ee"

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >

</web-app>

 Servlet2.3及以前,

代码

<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %>  

2.4以后版本少了jsp

web.xml

<?xml version="1.0" encoding="UTF-8"?>  

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">  

<web-app>        

</web-app>  

Servlet2.3中最好用JSTL1.0,如果用JSTL1.1,请加上

<?xml version="1.0" encoding="UTF-8"?>  

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">  

<web-app>       

    <taglib>  

        <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>  

        <taglib-location>/WEB-INF/c.tld</taglib-location>  

    </taglib>  

</web-app> 

tld目录下的c.tld拷贝到/WEB-INF?下。

 找到官方下载地址:

http://jakarta.apache.org/site/downloads/downloads_taglibs.html

选择 Standard 1.0 Taglib Standard 1.1 Taglib 可以下载jstl1.0jstl1.1版本。

According to TLD or attribute directive in tag file, attribute page does not accept any expressions

说的是对应tag的属性不支持表达式传入。解决的办法是,在tld文件的相应tag的相应属性中加上rtexprvalue属性并设置为true,比如:

<tag>

 <name>CustomTag</name>

 ……

 <attribute>

  <name>AttName</name>

  <rtexprvalue>true</rtexprvalue>

 </attribute>

</tag>

网上说这个和Tomcat的版本也有关系(5.x),我用的恰好是5.0.27,不过这个没有证实过。

应用部署运行的时候出现JSP异常发生在使用JSTL库的时候: According to TLD or attribute directive in tag file, attribute value does not accept any expressions,可能是因为使用了JSP2.0版本同时又没有使用JSTL core库的备用版本(RT), 以下有两种处理方法:

1. 修改web.xml.

<web-app

xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">

改为2.3版本的

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

2. 使用JSTL core RT

JSTL core库的有两种taglib伪指令其中RT库即是依赖于JSP传统的请求时属性值而不是依赖于EL来实现(称为EL.JSP2.0将支持EL)

JSP中使用<%@ taglib uri=http://java.sun.com/jstl/core prefix="c"%>2.3版本都可以,2.4就不行了难道是版本不兼容吗?

只要将

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>

改为

<%@ taglib uri=http://java.sun.com/jstl/core_rt prefix="c"%>

就没有问题了

 

总结-------jstl与servlet的版本搭配

Version JSTL version Requirements  
Standard 1.2 JSTL 1.2 (not yet JCP approved) Servlet 2.5, JavaServer Pages 2.1  
Standard 1.1 JSTL 1.1 Servlet 2.4, JavaServer Pages 2.0  
Standard 1.0 JSTL 1.0 Servlet 2.3, JavaServer Pages 1.2  

Servlet2.3及以前

jsp代码

<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

在servlet2.4及以后

jsp代码---引入路径多了一个“jsp”

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值