在项目中要提高开发效率,就要学习下java 自定义标签.自定义标签的有什么好处?它可以把一些常用的功能封装起来。在前台通过 <henry:test value="henry"></henry:test> 这样的标签来实现某功能.比如分页功能,如果用自定义签页面就会更加简洁
以下通个小例子来简单的认识下JAVA自定义标签
首先创建一个TestTag类继承extends TagSupport,然后现实doEndTag()方法,具体方法如下
public class TestTag extends TagSupport {
private String value; //注意这个参数,一定要有get和set方法
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public int doEndTag() throws JspException {
try {
StringBuffer sb = new StringBuffer();
sb.append("<input type=\"text\"");
sb.append("value=\"");
sb.append(this.value);
sb.append("\"");
sb.append("/>");
pageContext.getOut().print(sb);
} catch (IOException e) {
e.printStackTrace();
}
return 0;
}
SKIP_BODY 表示不用处理标签体,直接调用doEndTag()方法。
SKIP_PAGE 忽略标签后面的JSP内容。
EVAL_PAGE 处理标签后,继续处理JSP后面的内容。
EVAL_BODY_BUFFERED 表示需要处理标签体。
EVAL_BODY_INCLUDE 表示需要处理标签体,但绕过setBodyContent()和doInitBody()方法。
EVAL_BODY_AGAIN 对标签体循环处理。
第二步创建tld文件 在项目/WEB-INF/新建tlds文件->test.tld
<?xml version="1.0" encoding="UTF-8"?>
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<uri>/WEB-INF/tlds/test.tld</uri>
<tag>
<name>test</name> <!-- 标签名字 -->
<tag-class>henry.tag.TestTag</tag-class> <!-- 类路径 -->
<body-content>empty</body-content>
<attribute>
<name>value</name> <!-- 注意:这里给出,参数名称,就是实现类里的,setter方法的名-->
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
前台调用:
jsp 头部加上
<%@ taglib prefix="henry" uri="/WEB-INF/tlds/test.tld" %>
prefix="henry" 就是标签名字
面页引用 <henry:test value="henry"/>