`

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

    博客分类:
  • java
 
阅读更多

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" %>

 

 

分享到:
评论

相关推荐

    jsp之c标签用法实例分析.docx

    - 在JSP 2.4版本中,使用JSTL可能遇到与EL(Expression Language)的兼容性问题,导致错误提示“According to TLD or attribute directive in tag file, attribute value does not accept any expressions”。...

    tld,TreeTag组件

    TLD(Tag Library Descriptor)是这个组件的核心,它定义了自定义标签库及其行为。在这个名为“tld.zip”的压缩包中,包含了多个TLD文件以及一些相关的JavaScript资源,用于实现丰富的用户界面功能。 首先,我们来...

    Java自定义标签开发Tag和tld开发

    Java自定义标签开发Tag和tld开发,非常详细的哟

    pager-tagl.tld

    《pager-tagl.tld:一个页面分页标签库的详细解析与应用》 在Web开发领域,尤其是在使用Java Server Pages (JSP) 技术时,我们常常会遇到需要处理大量数据并进行分页显示的情况。`pager-tagl.tld`文件就是这样一个...

    tld自定义标签基础入门demo

    在Java Web开发中,TLD(Tag Library Descriptor)文件是用于定义自定义JSP标签库的关键组件。TLD文件提供了一种方式,让开发者能够创建自己的标签,这些标签可以简化代码,提高可读性和可维护性。这个"tld自定义...

    struts的tld属性解释

    ### Struts的TLD属性详解 #### 一、引言 Struts框架是Apache软件基金会下的Jakarta项目中的一个开源框架,它是一个基于MVC设计模式的Java Web应用框架,被广泛应用于构建企业级Web应用程序。TLD(Tag Library ...

    tld自定义标签demo

    在Java Web开发中,TLD(Tag Library Descriptor)文件是一种用于定义自定义JSP标签的XML文件。TLD文件描述了标签库中的每个自定义标签的功能、属性、返回类型等元数据,使得开发者可以创建自己的标签库来扩展JSP...

    JSTL标签所需要的tld文件(c.tld、fmt.tld、fn.tld)

    JSTL标签所需要的tld文件,包括 c.tld、fmt.tld、fn.tld 三个 几乎所有的JSTL标签下载的zip中都只有一个c.tld,然后只讲解&lt;C:&gt;标签怎么用,其实&lt;fmt:&gt; &lt;fn:&gt;标签也非常好用和实用,找了好久才找到...

    jstl1.1 tld文件

    **JSTL 1.1 TLD 文件详解** 在Java Web开发中,JSTL(JavaServer Pages Standard Tag Library)是一种标准标签库,用于增强JSP页面的功能,使其更加简洁和可维护。JSTL 1.1是该库的一个版本,提供了多种处理常见Web...

    tld文件(包含15个tld文件)

    c-1_0.tld, c-1_0-rt.tld, c.tld, fmt-1_0.tld, fmt-1_0-rt.tld, fmt.tld, fn.tld, permittedTaglibs.tld, scriptfree.tld, sql-1_0.tld, sql-1_0-rt.tld, sql.tld, x-1_0.tld, x-1_0-rt.tld, x.tld

    c.tld、fmt.tld、fn.tld等包

    而TLD(Tag Library Descriptor)文件是JSP标签库的元数据定义文件,用于描述自定义标签的行为和属性。在JSTL(JavaServer Pages Standard Tag Library)中,TLD文件起到了关键的作用。 标题中提到的"**c.tld、fmt....

Global site tag (gtag.js) - Google Analytics