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
<?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.0和jstl1.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 |
相关推荐
- 在JSP 2.4版本中,使用JSTL可能遇到与EL(Expression Language)的兼容性问题,导致错误提示“According to TLD or attribute directive in tag file, attribute value does not accept any expressions”。...
TLD(Tag Library Descriptor)是这个组件的核心,它定义了自定义标签库及其行为。在这个名为“tld.zip”的压缩包中,包含了多个TLD文件以及一些相关的JavaScript资源,用于实现丰富的用户界面功能。 首先,我们来...
Java自定义标签开发Tag和tld开发,非常详细的哟
《pager-tagl.tld:一个页面分页标签库的详细解析与应用》 在Web开发领域,尤其是在使用Java Server Pages (JSP) 技术时,我们常常会遇到需要处理大量数据并进行分页显示的情况。`pager-tagl.tld`文件就是这样一个...
在Java Web开发中,TLD(Tag Library Descriptor)文件是用于定义自定义JSP标签库的关键组件。TLD文件提供了一种方式,让开发者能够创建自己的标签,这些标签可以简化代码,提高可读性和可维护性。这个"tld自定义...
### Struts的TLD属性详解 #### 一、引言 Struts框架是Apache软件基金会下的Jakarta项目中的一个开源框架,它是一个基于MVC设计模式的Java Web应用框架,被广泛应用于构建企业级Web应用程序。TLD(Tag Library ...
在Java Web开发中,TLD(Tag Library Descriptor)文件是一种用于定义自定义JSP标签的XML文件。TLD文件描述了标签库中的每个自定义标签的功能、属性、返回类型等元数据,使得开发者可以创建自己的标签库来扩展JSP...
JSTL标签所需要的tld文件,包括 c.tld、fmt.tld、fn.tld 三个 几乎所有的JSTL标签下载的zip中都只有一个c.tld,然后只讲解<C:>标签怎么用,其实<fmt:> <fn:>标签也非常好用和实用,找了好久才找到...
**JSTL 1.1 TLD 文件详解** 在Java Web开发中,JSTL(JavaServer Pages Standard Tag Library)是一种标准标签库,用于增强JSP页面的功能,使其更加简洁和可维护。JSTL 1.1是该库的一个版本,提供了多种处理常见Web...
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
而TLD(Tag Library Descriptor)文件是JSP标签库的元数据定义文件,用于描述自定义标签的行为和属性。在JSTL(JavaServer Pages Standard Tag Library)中,TLD文件起到了关键的作用。 标题中提到的"**c.tld、fmt....