JSTL,几近晕倒的几个小问题

博客主要讲述了JSTL的版本对应问题,web.xml文件DTD版本2.3对应JSTL 1.0版,2.4对应1.1版,报错可能是版本问题。还指出List使用时的错误,若实体继承List添加属性,页面输出属性会报错,设计实体时最好加List成员变量而非直接继承。
一、版本问题,web.xml文件使用的DTD版本如果为2.3则对应JSTL的1.0版,2.4则对应1.1版。如果发现报错说JSTL标签里的表达式没有接收到任何值的时候,估计是版本出的错。到Google查下,很多解决方法。
二、List的c out。如果你的实体继承了List,而添加了一些属性,想要在页面直接输出这些属性,你可能这样做:
<c:out value="${mylist.myproperty}"/>但是你会发现这是个错误:
javax.servlet.ServletException: The "." operator was supplied with an index value of type "java.lang.String" to be applied to a List or array, but that value cannot be converted to an integer.
原因是这样的,当表达式的实体是一个List或者数组数型的话,"."操作符后面跟的属性一律被看作是List或数组的下标了。JSTL试图把它们转成整型,失败就会报错。
不但Out标签存在这个特点,其他也一样。所以在设计实体的时候,如果需要用到List的功能,最好加一个List的成员变量。不需要直接继承。

<think>首先,用户的问题是关于JSTL标签的介绍以及具体的几个标签。用户提供了引用内容,我需要参考这些引用来构建回答。引用内容如下: - [^1]: JSTL标签详解。JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用起来非常方便,它与JSP动作标签一样,只不过它不是JSP内置的标签,需要我们自己导包,以及指定标签库而已! - [^2]: 关于JSTLJSTL几个标签。JSTL是由5个不同的功能的标签库组成的。在JSTL1.1规范中,为5个标签库分别指定了不同的URI,并对标签库的前缀做出了规定:核心库 URI: http://java.sun.com/jsp/jstl/core 前缀: c;i18n库 URI: http://java.sun.com/jsp/jstl/fmt 前缀: fmt;sql库 URI: http://java.sun.com/jsp/jstl/sql 前缀: sql;XML库 URI: http://java.sun.com/jsp/jstl/xml 前缀: x;Functions库 URI: http://java.sun.com/jsp/jstl/functions 前缀: fn - [^3]: JSTL 标签库。1、先导入 jstl 标签库的 jar 包。taglibs-standard-impl-1.2.1.jar taglibs-standard-spec-1.2.1.jar。2、第二步,使用 taglib 指令引入标签库。<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> core 核心库使用 - [^4]: JSTL标签库及常用标签。如果你使用MyEclipse开发JavaWeb,那么在把项目发布到Tomcat时,你会发现,MyEclipse会在lib目录下存放jstl的Jar包!如果你没有使用MyEclipse开发那么需要自己来导入这个JSTL的Jar包:jstl-1.2.jar。 用户的问题:"我想了解JSTL标签的介绍以及具体的几个标签",所以回答应该包括两个部分:JSTL的总体介绍和具体的几个标签。 系统指令要求: - 行内数学表达式用$...$,但这里可能不涉及数学,所以可能不需要。 - 独立公式用$$...$$并单独成段,同样可能不适用。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,如。 - 回答结构清晰,帮助用户逐步解决问题,保证回答真实可靠。 回答结构: 1. **介绍JSTL**:基于引用解释JSTL是什么,它的作用,以及基本用法(如导入jar包和引入标签库)。 2. **具体标签介绍**:用户提到了"具体的几个标签",所以需要介绍一些常用标签。引用中提到了5个功能库:core, i18n, sql, xml, functions。我可以从这些库中选几个常用标签来介绍。 - 核心库(core):如<c:if>, <c:forEach>, <c:set>等。 - 其他库:如fmt库用于格式化,sql库用于数据库操作等。但根据引用[2],最好覆盖一些常见标签。 3. **引用标识**:在回答中,当使用引用内容时,在段落末尾添加引用标识。 4. **生成相关问题**:在结尾添加"§§相关问题§§"部分,列出2-3个相关问题。 具体内容: - **介绍部分**: - JSTL(JSP Standard Tag Library)是一个标准标签库,用于简化JSP页面开发。 - 它依赖于EL表达式(Expression Language)。 - 需要导入jar包,如taglibs-standard-impl.jar和taglibs-standard-spec.jar,或jstl-1.2.jar(引用[3]和[4])。 - 在JSP页面中使用taglib指令引入,如<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>(引用[3])。 - JSTL由5个标签库组成:core, fmt, sql, xml, functions(引用[2])。 - **具体标签**: - 重点介绍核心库(core)中的几个常用标签,因为它是基础。 - 例如: - <c:if>:用于条件判断。 - <c:forEach>:用于迭代集合。 - <c:set>:用于设置变量。 - <c:out>:用于输出。 - 简要提及其他库,如fmt库的<fmt:formatDate>用于日期格式化。 确保回答真实可靠:基于提供的引用,不要添加未经验证的信息。 最后,生成相关问题: - 例如:JSTL的核心标签有哪些? - JSTL如何与EL表达式集成? - JSTL的优缺点是什么? 回答结构: - 开头:介绍JSTL。 - 中间:分点介绍具体标签。 - 结尾:相关问题。 现在,构建回答。 </think> ### JSTL标签介绍及具体标签详解 JSTL(JSP Standard Tag Library,JSP标准标签库)是Apache开发的一套标签库,用于简化JSP页面中的逻辑处理和数据展示。它扩展了EL表达式(Expression Language),提供了一组标签来替代传统的Java脚本代码,使JSP更易维护和阅读。JSTL不是JSP内置标签,使用时需手动导入相关的JAR包,并在JSP页面中通过`taglib`指令引入标签库[^3]。JSTL由5个功能独立的标签库组成,每个库有特定的URI和前缀,覆盖核心逻辑、国际化、数据库操作、XML处理和函数处理等领域[^2]。 #### JSTL的组成和基本使用 - **标签库结构**:JSTL 1.1规范定义了5个标签库: - **核心库(Core)**:URI `http://java.sun.com/jsp/jstl/core`,前缀 `c`(用于条件判断、循环等基础操作)。 - **国际化库(I18N)**:URI `http://java.sun.com/jsp/jstl/fmt`,前缀 `fmt`(用于格式化日期、数字等)。 - **SQL库**:URI `http://java.sun.com/jsp/jstl/sql`,前缀 `sql`(用于数据库查询)。 - **XML库**:URI `http://java.sun.com/jsp/jstl/xml`,前缀 `x`(用于XML解析)。 - **函数库(Functions)**:URI `http://java.sun.com/jsp/jstl/functions`,前缀 `fn`(用于字符串处理等函数)。 引用。 - **导入步骤**: 1. **添加JAR包**:下载`jstl-1.2.jar`或`taglibs-standard-impl-1.2.1.jar`和`taglibs-standard-spec-1.2.1.jar`,放置到Web项目的`WEB-INF/lib`目录下(MyEclipse等IDE可能自动处理)[^4]。 2. **引入标签库**:在JSP页面顶部添加`taglib`指令,例如引入核心库: ```jsp <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> ``` 引用。 #### 具体JSTL标签示例(以核心库为主) JSTL标签语法简单,类似HTML标签,通过属性控制行为。以下是核心库中几个常用标签的详细介绍: 1. **`<c:if>`:条件判断标签** - **作用**:基于EL表达式的结果执行代码块。 - **语法**:`<c:if test="${EL表达式}">内容</c:if>`。 - **示例**:检查用户是否登录,显示欢迎消息。 ```jsp <c:if test="${not empty sessionScope.user}"> <p>欢迎, ${sessionScope.user.name}!</p> </c:if> ``` 这里,`test`属性使用EL表达式`${not empty sessionScope.user}`判断session中用户对象是否存在。 2. **`<c:forEach>`:循环迭代标签** - **作用**:遍历集合(如List、数组或Map),替代JSP的`for`循环。 - **语法**:`<c:forEach items="${集合}" var="变量名" [varStatus="状态变量"]>内容</c:forEach>`。 - **示例**:输出一个List中的元素。 ```jsp <c:forEach items="${requestScope.products}" var="product" varStatus="loop"> <p>产品 ${loop.index + 1}: ${product.name} - 价格: ${product.price}</p> </c:forEach> ``` 其中,`items`指定集合,`var`定义迭代变量,`varStatus`提供索引信息(如`loop.index`)。 3. **`<c:set>`:变量设置标签** - **作用**:在指定作用域(page、request、session、application)中设置变量。 - **语法**:`<c:set var="变量名" value="${值}" [scope="作用域"] />`。 - **示例**:存储计算后的值。 ```jsp <c:set var="discount" value="${product.price * 0.9}" scope="request" /> <p>折扣价: ${discount}</p> ``` 4. **`<c:out>`:安全输出标签** - **作用**:输出EL表达式结果,自动转义HTML特殊字符,防止XSS攻击。 - **语法**:`<c:value="${表达式}" [default="默认值"] />`。 - **示例**:显示用户输入的文本。 ```jsp <c:out value="${param.comment}" default="暂无评论" /> ``` **其他库简要**: - **`<fmt:formatDate>`(国际化库)**:格式化日期,如`<fmt:formatDate value="${date}" pattern="yyyy-MM-dd" />`。 - **`<sql:query>`(SQL库)**:执行SQL查询,但现代项目通常避免在JSP中直接操作数据库。 - **`<fn:contains>`(函数库)**:检查字符串包含,如`${fn:contains(str, 'sub')}`。 JSTL标签的优势在于提高代码可读性,减少脚本污染,但需注意性能开销和版本兼容性问题[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值