现在的位置: 首页 > 综合 > 正文

自定义标签之我心得

2013年10月23日 ⁄ 综合 ⁄ 共 4408字 ⁄ 字号 评论关闭

自定义标签

一、使用标签的优点

当多个页面中面临共同的东西的时候,为了便于维护,可以使用标签,页面中使用标签比使用 java代码 更美观,便于多人合作,便于维护。当然,我们在写java项目开发的时候会用到很多的标签,诸如jstl,html等等,但是这些标签很难保证面面俱到,所以我们还要自己定义标签,使得更为美观。O(∩_∩)O哈哈~

二、认识标签

<c:out name=“”></c:out>

c:前缀

out:标签名

name:标签的属性

该标签是jstl核心标签库中的一个标签

执行该标签可以显示name中的数据

三、标签的种类

  1. 空标签(无属性,无体(body
  2. 空体标签(有属性,无体(body
  3. 有属性,有体标签

<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=

抱歉!评论已关闭.