JSP 自定义标签tld--页面片段fragment

首先区别“页面片段”与普通标签 :

1.标签处理类定义Fragment属性,代表了“页面片段”

2.通过<jsp:attribute> 指令为标签的指定的属性值;


标签处理类先定义一个JSPFragment类型的属性,表示允许“页面片段”;

public class FragmentTag extends SimpleTagSupport {
private JspFragment fragment;


// fragment的setter和getter方法
public void setFragment(JspFragment fragment) {
this.fragment = fragment;
}


public JspFragment getFragment() {
return this.fragment;
}


@Override
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
out.println("<div style='padding:10px;border:1px solid black;"
+ ";border-radius:20px'>");
out.println("<h3>下面是动态传入的JSP片段</h3>");
// 调用、输出“页面片段”
fragment.invoke(null);
out.println("</div");
}
}


配置片段

<tag>
<!-- 定义标签名 -->
<name>helloWorld</name>
<!-- 定义标签处理类 -->
<tag-class>com.yd.tag.HelloWorldTag</tag-class>
<!-- 定义标签体为空 -->
<body-content>empty</body-content>
</tag>
<tag>
<!-- 定义标签名 -->
<name>iterator</name>
<!-- 定义标签处理类 -->
<tag-class>com.yd.tag.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>
<tag>
<!-- 定义标签名 -->
<name>fragment</name>
<!-- 定义标签处理类 -->
<tag-class>com.yd.tag.FragmentTag</tag-class>
<!-- 指定该标签不支持标签体 -->
<body-content>empty</body-content>
<!-- 定义标签属性:fragment -->
<attribute>
<name>fragment</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
</tag>

使用标签:

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@ page import="java.util.*"%>
<!-- 导入标签库,指定mytag前缀的标签,
由http://www.crazyit.org/mytaglib的标签库处理 -->
<%@ taglib uri="http://www.zyd.org/mytaglib" prefix="mytag"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>自定义标签示范</title>
<meta name="website" content="http://www.crazyit.org" />
</head>
<body bgcolor="#ffffc0">
<h2>下面显示的是自定义标签中的内容</h2>
<%
//创建一个List对象
List<String> a = new ArrayList<String>();
a.add("Hello Java");
a.add("www.zyd.org");
a.add("www.kitty.org");
//将List对象放入page范围内
pageContext.setAttribute("a" , a);
%>
<mytag:fragment>
<jsp:attribute name="fragment">
<%-- 使用jsp:attribute标签传入fragment参数(该注释不能放在fragment内) -->
<%-- 下面是动态的JSP页面片段 (这是注释)--%>
<mytag:helloWorld/>
</jsp:attribute>
</mytag:fragment>
<br/>
<mytag:fragment>
<jsp:attribute name="fragment">
<%-- 下面是动态的JSP页面片段 --%>
${pageContext.request.remoteAddr}
</jsp:attribute>
</mytag:fragment>
<mytag:fragment>
<jsp:attribute name="fragment">

<table border="1" bgcolor="#aaaadd" width="300">
<!-- 使用迭代器标签,对a集合进行迭代 -->
<mytag:iterator collection="a" item="item">
<tr>
<td>${pageScope.item}</td>
<tr>
</mytag:iterator>
</table>
</jsp:attribute>
</mytag:fragment>
</body>
</html>

另外 HelloWorldTag.java 代码:

public class HelloWorldTag extends SimpleTagSupport {
// 重写doTag()方法,该方法为标签生成页面内容
public void doTag() throws JspException, IOException {
// 获取页面输出流,并输出字符串
getJspContext().getOut().write("Hello World " + new java.util.Date());
}
}


你可能感兴趣的:(jsp,标签)