自定义标签
一、使用标签的优点
当多个页面中面临共同的东西的时候,为了便于维护,可以使用标签,页面中使用标签比使用 java代码 更美观,便于多人合作,便于维护。当然,我们在写java项目开发的时候会用到很多的标签,诸如jstl,html等等,但是这些标签很难保证面面俱到,所以我们还要自己定义标签,使得更为美观。O(∩_∩)O哈哈~
二、认识标签
<c:out name=“”></c:out>
c:前缀
out:标签名
name:标签的属性
该标签是jstl核心标签库中的一个标签
执行该标签可以显示name中的数据
三、标签的种类
- 空标签(无属性,无体(body) )
- 空体标签(有属性,无体(body) )
- 有属性,有体标签
<c:iterator items=“${d}”var=“d”>
<c:out name=“d”/>
</c:iterator>
四、 自定义标签
第一、标签处理程序(一个java类)
第二、标签描述文件(TLD)
第三、Jsp中使用标签
五、 使用自定义标签
1、空体标签应该继承自:
javax.servlet.jsp.tagext.TagSupport
2、有体标签应该继承自:
javax.servlet.jsp.tagext.BodyTagSupport
上面两个类都实现了Tag接口
六、标签处理程序返回值问题
对于无体标签:
1.doStartTag():返回SKIP_BODY(不要对体求值)
2.doEndTag():返回EVAL_PAGE(继续执行页面后面的代码)
对于有体标签:
1.doStartTag():返回EVAL_BODY_TAG(对体求值)
2.doEndTag():返回EVAL_PAGE(继续执行页面后面的代码)
七、标签处理程序属性问题
只要在标签中编写普通字段,增加get/set方法就可以了,会自动赋值
一个简单的例子(显示学生信息)
主要代码:
一,写java类
StuTag.java
package org.StudentSystem.taget;
import java.io.IOException;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;
import org.StudentSystem.dao.StudentDao;
import org.StudentSystem.pojo.StudentPoJo;
public class StuTag extends TagSupport {
private boolean showedit;//显示编辑
private String title;
public int doEndTag() throws JspException {
// TODO Auto-generated method stub
//调用org.StudentSystem.dao
StudentDao dao = new StudentDao();
StudentPoJo stu = new StudentPoJo();
List<StudentPoJo> data = dao.findExample(stu);
//用表格显示出学生信息 out
//访问out信息
JspWriter out = this.pageContext.getOut();
try {
out.println("<h1>"+this.title+"</h1>");
out.println("<table width=/"500/" border=1>");
out.println("<tr>");
out.println("<td>编号</td>");
out.println("<td>姓名</td>");
out.println("<td>年龄</td>");
out.println("<td>住址</td>");
if(this.showedit){
out.println("<td>操作</td>");
}
out.println("</tr>");
//循环
for(StudentPoJo u: data){
out.println("<tr>");
out.println("<td>"+u.getSid()+"</td>");
out.println("<td>"+u.getSname()+"</td>");
out.println("<td>"+u.getSage()+"</td>");
out.println("<td>"+u.getSaddress()+"</td>");
if(this.showedit){
out.println("<td>"+"<input type='button' value='编辑' onclick='check()'/> "+"</td>");
}
out.println("</tr>");
}
out.println("</table>");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//this.pageContext.get
return this.EVAL_PAGE;
}
public int doStartTag() throws JspException {
// TODO Auto-generated method stub
System.out.println("do Start tag");
return this.SKIP_BODY;
}
public Tag getParent() {
// TODO Auto-generated method stub
return null;
}
public void release() {
// TODO Auto-generated method stub
}
public void setPageContext(PageContext arg0) {
// TODO Auto-generated method stub
}
public void setParent(Tag arg0) {
// TODO Auto-generated method stub
}
public boolean isShowedit() {
return showedit;
}
public void setShowedit(boolean showedit) {
this.showedit = showedit;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
二,配置Student.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>student</shortname>
<uri>org.StudentSystem.pojo.StudentPoJo</uri>
<tag>
<name>showallstu</name><!-- 标签名字 -->
<tagclass>tags.StuTag</tagclass><!-- 标签处理程序类的位置 -->
<attribute>
<name>showedit</name>
<required>true</required> <!-- 是否必须写 -->
<rtexprvalue>true</rtexprvalue> <!-- 是否允许表达市 -->
</attribute>
<attribute>
<name>title</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
三,在Jsp页面中调用(主要代码)
<%@taglib uri=