`
hefan
  • 浏览: 45982 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用jstl标签报错问题

    博客分类:
  • java
阅读更多

JSP中出现According to TLD or attribute directive in tag file, attribute value does not accept any expressions 收藏
应用部署运行的时候出现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有两种版本,因此使用起来还是有一些区别需要注意的。
        1.JSTL1.0是支持Servlet2.3和JSP1.2规范的。http://java.sun.com/jstl/core
        2.JSTL1.1是支持Servlet2.4和JSP2.0规范的。http://java.sun.com/jsp/jstl/core

        这两种JSTL1.1的增强特性有以下几点:
        1.JSTL1.1可以使用函数标签库
        2.JSTL1.1规范中,JSP2.0容器已经能够独立的理解任何EL表达式。EL可以独立出现在JSP页面的任何角落。
        3.JSTL1.1中的EL表达式不支持(X>Y ? X=1 : Y=2)的表达式

        以下是一些容器支持的JSTL版本说明:
        

 容器 Servlet JSP Specification
 Weblogic 8.1 2.3     1.2
Tomcat 3.3.1a 2.2 1.1
Tomcat 4.1.27 2.3 1.2
Tomcat 5.0.12Beta 2.4 2.0

 

 

 

 

近日做一个小系统,使用了Struts,还用到了JSTL。这套配置在以前开发项目的时候就用过的,不过当时没有深入了解。所以,导致本次使用时,遇到了一个小问题,浪费了一点时间。

所以,做了一个小小的调查,搞清楚了JSTL1.0和JSTL1.1的区别及使用方法。

现象

在<c:out>标签中使用了EL,结果运行时报错。说根据tld文件的说明,该标签不支持表达式(EL)。

原文为:

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

依赖的环境及jar

1. 使用的标签库是从apache上down下来的。

    http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html

    一共两个文件,一个jstl.jar,一个standard.jar。

2. tomcat是5.0系列的。

原因

在JSP中声明uri的时候,写成了jstl 1.0的uri。

而1.0确实是不支持EL的,但是它的tld文件又存在于1.1的jar包中。

经过调查确认,总结如下三点:

1. jstl 1.0和1.1支持的servlet,jsp规范都不相同,支持相应规范的tomcat的版本也有要求的。具体如下。

NOTE: Standard-1.1 (JSTL 1.1) requires a JSP container that supports the Java Servlet 2.4 and JavaServer Pages 2.0 specifications. Jakarta Tomcat 5 supports the new specifications. The Standard-1.1 taglib has been tested with Tomcat 5.0.3. Standard-1.0 (implementation of the JSTL 1.0 specification) requires a JSP container that supports the Java Servlet 2.3 and JavaServer Pages 1.2 specifications. Jakarta Tomcat 4 supports these specifications. The Standard 1.0 taglib has been tested with Tomcat 4.1.24.

2. web.xml中要申明相应的servlet版本。

JSTL1.1和JSP2.0需要servlet2.4

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

JSTL1.0和JSP1.2需要servlet2.3

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

3. JSTL1.0和JSTL1.1的uri是不一样的,但是他们的tld文件同时存在于同一个standard.jar中。

解压缩下载的standard.jar,你会在/META-INF/下发现有一个c-1_0.tld,还有一个c.tld。

其中c-1_0.tld是JSTL1.0的core标签库的tld文件,c.tld是JSTL1.1的core标签库的tld文件。

用文本软件打开两个文件就会找到具体的uri。

JSTL1.0的使用方法为:

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

JSTL1.1的使用方法为:

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

分享到:
评论

相关推荐

    jstl1.2标签库jar包

    API JAR通常包含的是编译时所需的类和接口,开发者在编写JSP页面时会依赖这些接口来使用JSTL标签。例如,`fmt`, `fn`, `c`, `sql`, 和 `tags`等核心库的接口都在这个JAR中。 2. **JSTL Implementation (jstl-impl-...

    解决JSTL foEach标签 刷新报错的方法

    在Web开发中,JSP(Java Server Pages)是一种用于开发动态网站的技术,而JSTL(JavaServer ...这些知识点对于使用JSTL标签库进行Web开发的开发者来说是非常重要的,能够帮助他们更有效地解决实际开发中遇到的问题。

    解决IDEA中Maven项目中JSTL标签无效问题

    这种问题通常表现为JSTL标签不被识别,或者EL表达式直接被输出,而不是被正确计算和显示。 要解决这个问题,通常需要确保几个关键的配置正确设置。首先,确认在项目的pom.xml文件中是否已经添加了JSTL的依赖。通常...

    关于jsp页面使用jstl的异常分析.docx

    关于 JSP 页面使用 JSTL 的异常分析 在 JSP 页面中使用 JSTL 是一个非常常见的做法,但是有时可能会出现一些异常。这些异常可能是由于 Tomcat 的 lib 目录中没有 JSTL 的 jar 包所导致的。解决方法是将 JSTL 的 jar...

    Eclipse中使用jstl所需jar包和tld文件

    - 现在,你可以使用如`&lt;c:out&gt;`、`&lt;c:if&gt;`等JSTL标签进行页面逻辑控制和数据输出。 4. **自定义tld文件**: - 当你需要创建自定义标签时,需要编写一个tld文件来定义标签的行为。tld文件是XML格式,包含了标签的...

    JSTL 发生jar包错误

    JSTL 标签 发生 uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application问题时解决方法

    jstl和standard下载

    现在,我们可以在JSP页面中正常使用如`&lt;c:forEach&gt;`、`&lt;c:if&gt;`等JSTL标签了。 在20180317这个压缩包文件中,可能包含了上述提到的`jstl-1.x.x.jar`和`standard-1.x.x.jar`文件,解压并正确导入项目后,就可以解决...

    jstl.jar和standard.jar 报错Can not find "http://java.sun.com/jsp/jstl/

    在Java Web开发中,JSTL(JavaServer Pages Standard Tag Library)是一个标准的标签库,用于简化JSP页面的编写,提高代码的...通过检查和修正这些方面,通常可以成功解决这个问题,使得JSTL标签在JSP页面中正常工作。

    jstl-tld.zip

    当JSP容器(如Tomcat)找不到这些TLD文件时,会报错,无法正确解析JSTL标签。 在压缩包内的文件中: 1. `jstl.jar`:这是JSTL的核心库文件,包含了所有JSTL标签的实现。在JSP页面中使用JSTL,需要将这个jar文件添加...

    JSP 标准标签库(c标签库)

    JSTL标签库常常与EL(Expression Language)一起使用,EL是一种轻量级的脚本语言,用于获取和设置JavaBean属性、集合元素等。在上面的例子中,`${yourVariable}`就是EL表达式。 4. **优点** 使用JSTL和C标签库,...

    jstl-1.2.jar&standard;-1.1.2.jar

    在Eclipse中,如果没有引入这两个jar包,当尝试使用JSTL标签时,Eclipse可能会报错,因为编译器找不到相应的类和方法。例如,尝试使用`&lt;c:forEach&gt;`进行迭代或者`&lt;fmt:formatDate&gt;`进行日期格式化时,如果没有这些库...

    jsp中报c标签错误时导包

    5. **使用JSTL标签**:现在你可以正常地在JSP页面中使用`c:`标签了,例如: ```jsp &lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt; ... ${list}" var="item"&gt; ${item} ``` 在这段...

    standard.jar和jstl.jar

    当JSP页面中使用了JSTL标签,而服务器环境中没有对应的库,就会导致编译错误。将这两个jar包添加到Web应用的类路径(classpath)或WEB-INF/lib目录下,可以解决此类问题。 **JSTL和EL(Expression Language)的关系...

    jsp中使用return 报错解决方案.pdf

    3. **使用EL(Expression Language)和JSTL**:EL和JSTL是推荐在JSP中使用的表达式语言和标签库,它们可以更安全地处理数据和控制流程,而不会引发`return`语句的问题。 4. **配置MyEclipse的验证设置**:根据提供...

    web.xml加入taglib报错

    首先,`taglib`是JSP标签库的定义,用于引入自定义标签或标准标签库,如JSTL(JavaServer Pages Standard Tag Library)。在`web.xml`中,我们通常会看到类似以下的`taglib`元素: ```xml &lt;taglib-uri&gt;/tags/my...

    eclipse中部署java项目报错处理经验.txt

    为简化我们的jsp代码,会引入JSTL标准标签库,它可以方便我们对集合进行遍历、判断等操作。但引入指令中uri="http://java.sum.com/jsp/jstl/core”会报错,处理方案已备好,拿走不谢。

    JSTL必要包(jstl.jar和standard.jar)

    解决struts2中报错:...将这两个jar包拷贝到WebContent/WEB-INF/lib目录下,可解决当前App报错,若拷贝到Tomcat 7.0/lib目录下,可解决所有App的此类报错。

    Eclipse导入web项目(报错问题解决包含数据库的详细介绍)

    另一个常见的错误是缺少依赖库,如JSP标签库(JSTL)。如果报错提示找不到jstl.jar,你需要下载这个库,并将其添加到项目的类路径中。同样,通过"Build Path" -&gt; "Configure Build Path" -&gt; "Libraries" -&gt; "Add ...

    Java程序调试与错误收集--非代码引起的报错

    - 修改`web.xml`文件中的`&lt;jsp-config&gt;`部分,确保所有必需的JSTL标签库都已正确配置,参考示例: ```xml &lt;taglib-uri&gt;http://java.sun.com/jstl/fmt&lt;/taglib-uri&gt; &lt;taglib-location&gt;/WEB-INF/tlds/fmt.tld ...

    jstlhe standard的jar

    1. 在JSP页面顶部导入JSTL库:`&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%&gt;`,这将允许使用以`c:`开头的JSTL标签。 2. 在项目的类路径中包含`jstl.jar`和`standard.jar`。 3. 如果是在较新的...

Global site tag (gtag.js) - Google Analytics