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

struts2自定义标签的详细使用

2017年11月11日 ⁄ 综合 ⁄ 共 4439字 ⁄ 字号 评论关闭

    例子:查询所有学生的资料(学号,姓名,性别,出生年月,家庭地址)
     第一步:在tags包下,新建Java类,需继承javax.servlet.jsp.tagext.TagSupport,并编写代码如下:

Code:
  1. package tags;
      
  2.   
  3. import java.io.IOException;
      
  4. import java.util.ArrayList;
      
  5.   
  6. import javax.servlet.jsp.JspException;
      
  7. import javax.servlet.jsp.JspWriter;
      
  8. import javax.servlet.jsp.tagext.TagSupport;
      
  9.   
  10. import po.Student;
      
  11.   
  12. import dao.StudentDao;
      
  13.   
  14. //自定义标签的规范   该标签的功能:显示所有的学生的详细资料   
  15. //1、继承:javax.servlet.jsp.tagext.TagSupport   
  16. //2、重写方法doEndTag和doStartTag(系统自动调用)   
  17.   
  18. public class DisplayAllTags extends TagSupport {
      
  19.     private static final long serialVersionUID = 1L;
      
  20.   
  21.     public DisplayAllTags() {
      
  22.         System.out.println("displayaddtags 构造函数");
      
  23.     }   
  24.   
  25.     public int doStartTag() throws JspException {
      
  26.         System.out.println("doStartTag函数");
      
  27.            
  28.         return SKIP_BODY;  //不实现标签的体,即空体标签。   
  29.     }   
  30.   
  31.     public int doEndTag() throws JspException {
      
  32.         System.out.println("doEndTag函数");
      
  33.         //查询数据库   
  34.         StudentDao studentDao=new StudentDao();
      
  35.         ArrayList arrayList=(ArrayList)studentDao.queryStus();   
  36.            
  37.         //通过父类TagSupport的属性值pageContext 取得相关的内置对象   
  38.         JspWriter out=pageContext.getOut();   
  39.         //遍历循环打印。   
  40.        
  41.         try {
      
  42.             out.println("<table>");
      
  43.             out.println("<tr>");
      
  44.             out.println("<td>学号</td>");
      
  45.             out.println("<td>姓名</td>");
      
  46.             out.println("<td>性别</td>");
      
  47.             out.println("<td>出生年月</td>");
      
  48.             out.println("<td>家庭住址</td>");
      
  49.             out.println("</tr>");
      
  50.             for(int i=0;i<arrayList.size();i++){
      
  51.                 Student student=(Student)arrayList.get(i);   
  52.                 out.println("<tr>");
      
  53.                 out.println("<td>"+student.getStuId()+"</td>");
      
  54.                 out.println("<td>"+student.getStuName()+"</td>");
      
  55.                 out.println("<td>"+student.getStuSex()+"</td>");
      
  56.                 out.println("<td>"+student.getStuBir()+"</td>");
      
  57.                 out.println("<td>"+student.getStuAdd()+"</td>");
      
  58.                 out.println("</tr>");
      
  59.             }   
  60.             out.println("<table>");
      
  61.         } catch (IOException e) {
      
  62.             e.printStackTrace();   
  63.         }   
  64.                
  65.         //=============pageContext还可以get更多的内置对象。   
  66. //      pageContext.getRequest();   
  67. //      pageContext.getResponse();   
  68. //      pageContext.getSession();   
  69. //      pageContext.getServletContext();   
  70.         return EVAL_PAGE;   //   
  71.     }   
  72.   
  73. }   


     第二步:在 webroot→web-inf下新建一个.tld文件(右键new file就OK了),并编写代码如下:

Code:
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">  
  3. <taglib>     <!-- 自定义库标签的根 -->  
  4. <tlibversion>1.2</tlibversion>     <!-- 版本号 -->  
  5. <jspversion>1.1</jspversion>       <!-- JSP版本号 -->  
  6. <shortname>displaytags</shortname>        <!-- 标签名称-->  
  7. <uri>displaytags</uri>   <!-- 外界导入标签时,认识的名字,很重要。-->  
  8.   
  9. <tag>  
  10.  <name>displayAll</name>                            <!-- 标签名称 -->  
  11.  <tagclass>tags.DisplayAllTags</tagclass>          <!-- 对应的类 -->  
  12. </tag>  
  13.   
  14. <!-- 有属性的标签 -->  
  15.   <tag>  
  16.        <name>displayBySex</name>  
  17.         <tagclass>tags.DisplayBySexTags</tagclass>  
  18.         <attribute>   <!-- 对应标签的属性。 -->  
  19.              <name>sex</name>  
  20.              <required>true</required>  <!-- 是必需写的属性,即没有写属性标签不能被正常使用 -->  
  21.         </attribute>      
      
  22.    </tag>  
  23.   
  24. <!-- 1.两个属性 2.属性不是必需  3.属性可以用变量来赋值 -->  
  25.    <tag>  
  26.     <name>displayBySA</name>  
  27.     <tagclass>tags.DisplayBySAtags</tagclass>  
  28.     <attribute>  
  29.          <name>sex</name>  
  30.          <required>false</required>  
  31.      </attribute>  
  32.      <attribute>  
  33.          <name>add</name>  
  34.          <required>true</required>  
  35.          <rtexprvalue>true</rtexprvalue>  <!-- true:可以用表达式来表示 -->  
  36.      </attribute>  
  37.    </tag>  
  38. </taglib>  


     第三步:编写jsp页面,代码如下:

Code:
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
      
  2. <%@ taglib uri="displaytags" prefix="stu"%>
      
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      
  4.   
  5. <html>   
  6.   <head>   
  7.     <title>测试自定义标签</title>   
  8.   </head>   
  9.   <body>   
  10.           打印学生的名单<br>   
  11.     <stu:displayAll></stu:displayAll>   
  12.     <br>打印学生的名单(一个属性的测试)<br>   
  13.     <stu:displayBySex sex="男"></stu:displayBySex>
      
  14.     <br>打印学生的名单(两个属性的测试)<br>   
  15.     <stu:displayBySA add="上海"></stu:displayBySA>
      
  16.   </body>   
  17. </html>   

     大概的流程就这样子。其中还用到的dao.Student类(负责与数据库交互)和po.Student(javabean);还有DisplayBySexTags.java和DispalyBySATags.java  与DisplayAllTags.java差不多。

抱歉!评论已关闭.