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

JSP自定义标签

2015-03-15 21:29 225 查看

JSP自定义标签:

编写标签对应的实现类时,需要重载BodyTagSupport类的方法:doStartTag(), doEndTag()。

自定义标签的步骤:

(1)第一步:开发标签实现类。

(2)第二步:编写标签描述tld文件,并将tld文件放于当前应用的/WEB-INF目录下。

(3)在JSP页面中声明并调用标签。

第一步:即编写Java代码,编写标签对应的实现类时,需要重载BodyTagSupport类的方法:doStartTag(), doEndTag()。

//一下代码打印出 hello + name;

package hall;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.JspWriter;

import javax.servlet.jsp.tagext.TagSupport;

public class test_tag extends TagSupport {

private String name = null;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int doEndTag() throws JspException {

try {

JspWriter out = pageContext.getOut();

out.print("hello !" + name);

} catch (Exception e) {

throw new JspException(e);

}

return EVAL_PAGE;

}

}

第二步:编写后缀名为tld的文件:

<?xml version="1.0" encoding="UTF-8"?> (文件头)

<taglib>

<tlib-version>1.0</tlib-version>

<jsp-version>1.2</jsp-version>

<short-name>mytag</short-name> (标签库的名称)

<tag>

<description>打印页面</description> (简单描述该标签功能,不写也行)

<name>print</name>
(标签名,调用该标签时需要用到)

<tag-class>hall.test_tag</tag-class>(Java代码的目录,格式是:包名.类名)

<body-contnt>empty</body-contnt> (该案例标签体为空,若不为空则写JSP)

<attribute>

<name>name</name>
(指定属性的名称)

<required>false</required>
(设置该标签是否必须指定)

<rtexprvalue>false</rtexprvalue> (指明该属性能否接受JSP表达式)

</attribute>

</tag>

</taglib>

第三步:编写JSP代码

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@ taglib uri="/WEB-INF/test_tag.tld" prefix="test_tag"%>(uri为tld文件的路径,prefix为调用这个标签的前缀)

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

Test tag <test_tag:print name="firhter"/>

(调用标签:前缀+标签名,前缀在上面自己设置,标签名在.tld文件里)

</body>

</html>

运行结果:



自定义带有体的标签:

开发标签,可实现BodyTag接口,也可从BodyTag接口的实现类BodyTagSupport继承,一般从BodyTagSupport类继承开发。 

编写标签对应的实现类时,需要重载BodyTagSupport类几个方法:doStartTag(), setBodyContent(), doInitBody(), doAfterBody(), doEndTag(),他们执行顺序如下:doStartTag()→doInitBody()→setBodyContent()→doAfterBody()→doEndTag()

package hall;

import javax.servlet.jsp.JspWriter;

import javax.servlet.jsp.tagext.BodyTagSupport;

public class test_tag1 extends BodyTagSupport{

public int doStartTag(){}

//----标签体执行完后调用此方法----

public int doInitBody(){}

public int setBodyContent(){}

public int doAfterBody(){}

//----标签结束时调用此方法-------

public int doEndTag(){}

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