JSP2自定义标签(三)——带标签体的标签

7 篇文章 0 订阅

 本文摘自:李刚 著 《轻量级 Java EE企业应用实战 Struts2+Spring+hibernate整合开发》

续 JSP2自定义标签(一)、JSP2自定义标签(二)

 

 

         带标签体的标签,可以在标签内嵌入其他内容(包括静态的HTML内容和动态的JSP内容),通常用于完成一些逻辑运算,例如判断和循环。下面一个迭代标签为示例,介绍带标签体标签的开发过程:

package ppp;

import java.io.IOException;
import java.util.Collection;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class IteratorTag extends SimpleTagSupport {

	// 标签属性,用于指定被迭代的集合
	private String Collection;
	// 标签属性,用于指定被迭代集合的元素,为集合元素指定名称
	private String item;

	// collection属性的setter和getter方法
	public String getCollection() {
		return Collection;
	}

	public void setCollection(String collection) {
		Collection = collection;
	}

	// item属性的setter和getter方法
	public String getItem() {
		return item;
	}

	public void setItem(String item) {
		this.item = item;
	}

	// 标签处理方法,简单的标签处理类只需要重写doTag()方法
	public void doTag() throws IOException, JspException {
		// 从pagecontext中获取属性名为collection的集合
		Collection itemList = (Collection) getJspContext();
		// 遍历集合
		for (Object s : itemList) {
			// 将集合元素设置到page范围]
			getJspContext().setAttribute(item, s);
			// 输出标签体
			getJspBody().invoke(null);
		}
	}
}

        上面的标签处理类与前面的标签处理类并无太大的不同,该处理类包含了两个属性,并且为这两个属性提供了setter和getter方法。标签处理类的doTag()方法首先从page范围内容获取了指定名称的Collection对象,然后遍历Collection对象的元素,每次遍历都调用getJspBody()方法,该方法返回该标签所包含的标签体:Jspfragment对象,执行该对象的 invoke()方法,即可输出标签体的内容。该标签体的所用是:遍历指定集合,每遍历一个集合元素,即输出标签体一次。

        因为该标签的标签体不为空,配置该标签时指定body-content为scriptless,该标签的配置代码片段如下:

<!--定义标签-->
<tag>
     <!--定义标签名-->
	 <name>iterator</name>
	 <!--定义标签处理类-->
	 <tag-class>ppp.IteratorTag</tag-class>
	 <!--定义标签体不允许出现JSP脚本-->
	 <body-content>scriptless</body-content>
	 <!--配置标签属性:Collection-->
	 <attribute>
	      <name>Collection</name>
	      <required>true</required>
          <fragment>true</fragment>
	 </attribute>
	  <!--配置标签属性:item-->
	 <attribute>
	      <name>item</name>
	      <required>true</required>
          <fragment>true</fragment>
	 </attribute>
</tag>

        上面的<body-content>scriptless</body-content>代码指定该标签的标签体可以是静态的HTML内容,也可以是表达式语言。

为了测试在JSP中使用该标签的效果,我们首先把一个List对象置成page范围的属性,然后使用该标签来迭代输出List集合的全部元素。

<%@ page contentType="text/html; charset = GBK"%>
<!--导入标签库,指定mytag前缀的标签,
       由http://www.crazyit.org/mytaglib的标签库处理-->
<%@ taglib uri="http://www.crazyit.org/mytaglib" prefix="mytag"%>
<html>
<head>
<title>带标签体的标签———迭代器标签</title>
</head>
<body>
<h2>带标签体的标签———迭代器标签</h2>
<hr>
<%
	//创建一个List对象
	List<String> a = new ArrayList<String>();
	a.add("hello");
	a.add("World");
	a.add("java");
	//将List对象放入page范围中
	pageContext.setAttribute("a", a);
%>
<table border="1" bgcolor="aaaadd" width="300">
	<!--使用标签,其中mytag是标签前缀,根据taglib编译指令
         mytag前缀将由http://www.crazyit.org/mytaglib的标签库处理-->
	<mytag:iterator collection="a" item="item">
		<tr>
			<td>${pageScope.item}</td>
		</tr>
	</mytag:iterator>
</table>
</body>
</html>

上面页面的

<mytag:iterator collection="a" item="item">
  <tr>
   <td>${pageScope.item}</td>
  </tr>
 </mytag:iterator>代码即可实现通过iterator标签来遍历指定集合。

        提示:实际上,JSTL标签库提供了一套功能非常强大的标签,例如,普通的输出标签,刚刚介绍的迭代器标签,和还有用于分支判断的标签,JSTL都非常完善的实现。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值