上一篇写了一个简单的标签,输出的内容都是写死的。这一篇定义一个标签,内容是可以自己编辑的。
首先说一下,我大概要干什么:我想定义这样一个标签,我传给标签两个字符串(一个header,一个items),标签最后会按照table的形式展现出来。
同样要做两件事:
编写标签处理器
注册标签
标签处理器:
package myTag;
import java.io.IOException;
import java.util.StringTokenizer;
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class SecondTag extends SimpleTagSupport {
/* 标签要接收的属性 */
private String header;
private String items;
/* sett,gett方法*/
public void setHeader(String header) {
this.header = header;
}
public void setItems(String items) {
this.items = items;
}
public String getHeader() {
return header;
}
public String getItems() {
return items;
}
public void doTag() throws IOException, JspException {
JspContext context = getJspContext();
/* 得到输出对象 */
JspWriter out = context.getOut();
out.print("<table style='border:1px solid green'>\n" +
"<tr>" +
"<td><span style='font-weight:bole'>" + getHeader() + "</span></td>" +
"</tr>");
StringTokenizer tokenizer = new StringTokenizer(getItems(), ",");
while(tokenizer.hasMoreElements()) {
String token = tokenizer.nextToken();
out.print("<tr>" +
"<td>" + token + "</td>" +
"</tr>");
}
out.print("</table>");
}
}
注册标签:
<!-- Second Tag -->
<tag>
<name>dataFormatter</name>
<tag-class>myTag.SecondTag</tag-class>
<body-content>empty</body-content>
<attribute><!-- header -->
<name>header</name>
<required>true</required>
</attribute>
<attribute><!-- 类容 -->
<name>items</name>
<required>true</required>
</attribute>
</tag>
jsp:
<%@ taglib uri="/WEB-INF/mytags.tld" prefix="easy" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head></head>
<meta charset="UTF-8">
<body>
<h1>第一个标签</h1>
<easy:firstTag></easy:firstTag>
<br/>
<h1>第二个标签</h1>
<easy:dataFormatter header="标题" items="A,B,C" />
<!-- 可变的输出类容完成 -->
</body>
</html>
<!-- <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
这个不加会出现乱码,如果加上还有乱码,就再去找一下原因,注意jsp的文件编码。 -->
运行结果:
(其实自定义标签比较简单,可以理解为定义一个类,然后在类里面获得JspWriter对象,接下来,想怎么输出都可以了)