自定义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
希望指点一下

发表评论>>

署名发表(评论可管理,不必输入下面的姓名)

姓名:

主题:

内容: 最少15个,最长1000个字符

验证码: (如不清楚,请刷新)

Copyright@2008 powered by YuLog