您的位置:首页 > Web前端 > JavaScript

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

2016-03-28 14:37 405 查看
首先区别“页面片段”与普通标签 :

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());

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: