自定义jsp嵌套标签
目标:
定义两个标签,父标签中含有字符串:"hi {0}, i am {1}. ",子标签用来设置父标签的参数占位符。
步骤:
(1)开发标签实现类
(2)编写 tld 标签描述文件
(3)在 web.xml 中引用 tld
(4)写jsp测试
(1)
//父标签:HelloTag.java
package web.test.tag;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;
public class HelloTag extends TagSupport {
private String message = "hi {0}, i am {1}. ";
private List params;
public HelloTag(){
super();
params = new ArrayList();
}
public int doStartTag() throws JspTagException {
params.clear();
return this.EVAL_BODY_INCLUDE;
}
public int doEndTag() throws JspTagException {
if(params != null){
Object[] messageArgs = params.toArray();
MessageFormat formatter =
new MessageFormat("");
formatter.applyPattern(message);
message = formatter.format(messageArgs);
}
try {
this.pageContext.getOut().write(message);
} catch (Exception e) {
e.printStackTrace();
}
return this.EVAL_PAGE;
}
public void addParam(Object arg) {
params.add(arg);
}
}
//子标签:ParamTag.java
package web.test.tag;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;
public class ParamTag extends TagSupport{
private String value="";
public void setValue(String value){
this.value = value;
}
public int doEndTag() throws JspTagException {
Tag t = findAncestorWithClass(
this, HelloTag.class);
HelloTag parent = (HelloTag) t;
parent.addParam(value);
return EVAL_PAGE;
}
}
(2)
//hello-tag.tld
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.2</tlibversion>
<jspversion>1.1</jspversion>
<shortname>bean</shortname>
<uri>http://www.aaa.com/tags</uri>
<tag>
<name>hello</name>
<tagclass>web.test.action.HelloTag</tagclass>
<bodycontent>JSP</bodycontent>
</tag>
<tag>
<name>param</name>
<tagclass>web.test.action.ParamTag</tagclass>
<bodycontent></bodycontent>
<attribute>
<name>value</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
(3)在web.xml 中添加
<jsp-config>
<taglib>
<taglib-uri>/WEB-INF/hello-tag.tld</taglib-uri>
<taglib-location>/WEB-INF/hello-tag.tld</taglib-location>
</taglib>
</jsp-config>
(4)
//test.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.aaa.com/tags" prefix="hello" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
<hello:hello>
<hello:param value="abc"/>
<hello:param value="efg"/>
</hello:hello>
</body>
</html>
irini
2007-05-06 17:44:18
评论:2
阅读:740
引用:0
@2007-11-07 10:31:40 安斯理
..那个问题自己搞好了.
谢了
谢了
@2007-11-07 10:27:03 安斯理
很感谢你提供这份资料
不过 我copy你的代码之后还有一点小问题
QQ:251021591
MSN:ansili@qq.com
希望指点一下
不过 我copy你的代码之后还有一点小问题
QQ:251021591
MSN:ansili@qq.com
希望指点一下
