`

JSP定制标记——用“脚本编程变量”取代bean来进行遍历

阅读更多

Tag13.java

package tag13;

import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
import java.io.IOException;
import java.util.List;
import java.util.Iterator;

public class Tag13 extends BodyTagSupport {
private List lists;
private Iterator iters;
public void setLists(List lists){
this.lists = lists;
}
public int doStartTag() throws JspException {
return EVAL_BODY_BUFFERED;
}
public void doInitBody() throws JspException {
if (lists.size() <= 0) return;
iters = lists.iterator();
pageContext.setAttribute(this.id, iters.next());
}
public int doAfterBody() throws JspException {
if (iters.hasNext()) {
pageContext.setAttribute(this.id, iters.next());
return EVAL_BODY_AGAIN;
} else {
try {
bodyContent.writeOut(this.getPreviousOut());
} catch (IOException ioe) {
throw new JspException(ioe.getMessage());
}
}
return SKIP_BODY;
}
}

Info13.java

package tag13;

import javax.servlet.jsp.tagext.TagData;
import javax.servlet.jsp.tagext.TagExtraInfo;
import javax.servlet.jsp.tagext.VariableInfo;

public class Info13 extends TagExtraInfo {
public VariableInfo[] getVariableInfo(TagData data) {
return new VariableInfo[] {
new VariableInfo(data.getId(),
"java.lang.Object",
true,
VariableInfo.NESTED)
};
}
}

tag13.tld

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC '-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN' 'http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd'>

<taglib>
<tlib-version>1.2</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>aaaaaaaaaaaaaaa</short-name>
<info>aaaaaaaaaa</info>
<tag>
<name>tag13</name>
<tag-class>tag13.Tag13</tag-class>
<tei-class>tag13.Info13</tei-class>
<body-content>JSP</body-content>
<attribute>
<name>id</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>lists</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>

tag13.jsp

<%@ page contentType="text/html;charset=GBK" %>
<%@ taglib prefix="tag" uri="tag13.tld" %>
<%@ page import="java.util.List,
java.util.ArrayList"
%>

<html>
<body>
<%
List mylists = new ArrayList();
mylists.add("aaaaaaaaaaaaaaa");
mylists.add("bbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
mylists.add("ccccccccccccccccccccccccccccccccccc");
mylists.add("dddddddddddddddddddddddddddddddddddddddddddd");
%>
<table width="300" border="5">
<tag:tag13 id="iter" lists="<%=mylists%>">
<tr><td><%=iter%></td></tr>
</tag:tag13>
</table>
</body>
</html>

结果:

aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbb
ccccccccccccccccccccccccccccccccccc
dddddddddddddddddddddddddddddddddddddddddddd

分析:

1、在标记类中每次计算Body时,以标记类的ID为key保存bean到PageContext中,然后在JSP页面中直接访问这个bean。

2、由于标记类的ID属性由TagSupport类和BodyTagSupport类进行维护,因此程序员在自己定制的标记类中无须另设定一个ID属性。

分享到:
评论

相关推荐

    jsp实用编程实例集锦

    - 示例中可能包含如何从数据库获取数据,进行分页展示,使用`&lt;c:forEach&gt;`实现循环遍历。 10. **安全与性能优化** - 避免在JSP中写过多业务逻辑,保持JSP页面的清洁,提升维护性和性能。 - 使用session管理用户...

    JSP课后编程题答案12-16章

    1. **JSP脚本元素**:包括脚本声明、脚本表达式和脚本段。脚本声明可以声明变量和方法,脚本表达式用于输出Java表达式的值,脚本段可以包含复杂的Java代码。 2. **自定义标签**:通过创建TLD(Tag Library ...

    JSP编程小技巧集锦121

    4. **脚本元素**:`&lt;scriptlet&gt;`、`&lt;declaration&gt;` 和 `&lt;expression&gt;` 是JSP脚本元素,其中 `&lt;scriptlet&gt;` 用于插入Java代码块,`&lt;declaration&gt;` 用于声明变量或方法,`&lt;expression&gt;` 则用于插入Java表达式结果。...

    JSP高级编程 电子版教程

    JSP脚本元素** 包括`&lt;scriptlet&gt;`, `&lt;declaration&gt;`, 和`&lt;expression&gt;`。`&lt;scriptlet&gt;`包含Java代码片段,`&lt;declaration&gt;`声明变量或方法,`&lt;expression&gt;`用于输出表达式的值。 **6. JavaServer Pages Standard ...

    JSP数据库操作例程(Use Bean)

    在这个例子中,我们看到了如何使用JavaBean在JSP(JavaServer Pages)中进行数据库操作,主要涉及了JDBC(Java Database Connectivity)技术。首先,我们要理解JSP和JavaBean的概念。 JSP是一种基于Java的服务器端...

    JSP范例宝典 第2章

    4. **JSP脚本元素**: 脚本元素包括声明、脚本片段和表达式。声明部分可以定义变量和方法,但不会直接输出。脚本片段可以包含任何合法的Java代码,常用于逻辑控制和数据处理。表达式则会将Java表达式的值转换为字符...

    ppt课件-第7章 JSP标准标记库.zip

    **JSP标准标记库(JSTL)详解** 在Java Web开发中,JSP(JavaServer Pages)是一种常用的动态网页技术,它允许开发者在HTML页面中嵌入Java代码,实现服务器端的逻辑处理。然而,直接在JSP页面中编写Java代码会使得...

    jsp编程技巧

    - 使用`&lt;c:forEach&gt;`遍历集合,`&lt;c:if&gt;`进行条件判断,`&lt;c:set&gt;`设置变量等。 6. **分离逻辑和展示** - 业务逻辑应放在JavaBean或Servlet中,JSP仅负责显示数据,遵循MVC模式。 - 使用Model2架构,提高代码的可...

    JSP网上书店 JSP实现增、删、改、查

    **JSP网上书店系统——基于JSP的CRUD操作详解** 在Web开发中,"增、删、改、查"(Create, Read, Update, Delete,简称CRUD)是最基本的操作,也是任何业务系统的核心功能。JSP(JavaServer Pages)作为Java平台上的...

    JSP简单的博客程序

    使用JSTL可以简化JSP页面的编程,例如,我们可以用 `&lt;c:forEach&gt;` 来遍历集合,`&lt;c:if&gt;` 进行条件判断,`&lt;c:url&gt;` 和 `&lt;c:param&gt;` 创建URL和添加参数。 **8. CSS和JavaScript** 为了提供良好的用户体验,博客系统...

    Jsp精华文章

    脚本元素包括脚本声明(declarations)、脚本表达式(expressions)和脚本片段(scriptlets),它们分别用于定义变量、输出数据和编写复杂的Java代码。动作元素如`&lt;jsp:forward&gt;`和`&lt;jsp:include&gt;`则用于控制页面...

    jsp实现-交易平台JSP源码

    - **业务逻辑**:JSP脚本元素可以处理用户的交易请求,如登录验证、购物车管理、支付接口调用等。 - **会话管理**:使用JSP内置对象session,跟踪用户状态,实现购物车的持久化。 - **异常处理**:利用JSP的错误...

    JSP实验报告+登录系统的制作课程 简单的登录页面 制作页面

    在 JSP 中,可以使用循环语句来遍历数据,例如 `for` 语句和 `while` 语句。但是在本实验中没有使用循环语句。 本实验报告 + 登录系统的制作课程涵盖了 JSP 的基本结构、Session 的使用、Redirect 的使用、Form ...

    jsp中文手册.rar_jsp_jsp中文手册

    1. **过度使用脚本可能导致混乱:** 如果在JSP页面中混杂过多的Java代码,可能会降低代码的可读性和维护性。 2. **性能:** 相比于纯Servlet,JSP的翻译和编译过程会增加一些开销。 总的来说,JSP是Java Web开发中...

    blog.rar_JSP 博客 简单_jsp 评论功能_jsp实现评论

    【JSP脚本元素和指令】 在JSP页面中,我们可以使用以下几种脚本元素: - **&lt;% %&gt;:** 脚本片段,可以包含任何Java代码,通常用于控制逻辑。 - ****: 表达式,会将Java表达式的值转换为字符串并插入到HTML输出中。 -...

    jsp课件及源码

    JSTL提供了一系列预定义的标签,减少了在JSP页面中使用脚本的需要,提高了代码的可读性和可维护性。例如,`&lt;c:forEach&gt;`用于遍历集合,`&lt;fmt:formatDate&gt;`用于格式化日期。 **6. Servlet与JSP的关系** Servlet是...

    jsp书城项目

    6. **JSTL(JavaServer Pages Standard Tag Library)**:为了减少JSP页面中的Java代码,可以使用JSTL标签库,如`&lt;c:forEach&gt;`遍历数组,`&lt;fmt:formatDate&gt;`格式化日期。 7. **EL(Expression Language)**:EL用于...

    jsp - Wiley - Beginning JavaServer Pages

    EL表达式可以替代传统的JSP脚本,提高页面的可读性和维护性。 1. **EL基础语法**: - 语法:`${expression}` - 示例: - 访问bean的属性: ```jsp ${user.name} ``` 2. **EL运算符**: - 算术运算符:`+`, ...

    JSP核心技术和电子商务应用实例源代码分析

    - **商品展示**:通过数据库查询获取商品信息,并使用JSP显示在网页上,可能结合EL和JSTL进行数据遍历和格式化。 - **购物车**:利用session存储用户购物车信息,JSP页面可以实时更新购物车状态,如添加、删除商品...

    jsp教程PDF格式

    在JSP中,开发者可以使用不同的元素来控制页面的行为,包括脚本元素、指令、动作和注释。 **脚本元素**: - **声明(Declaration)**:如`!int counter=0%&gt;`,用于声明变量和方法,作用域仅限当前页面。 - **...

Global site tag (gtag.js) - Google Analytics