struts自定义标签学习(三)

整理下早上学习的一点点东西,一个自定义标签的例子。之所以要坚持做笔记,我想最大的原因就是学完老是忘了,忘了又得重新 看视频、查资料、百度。。。而且自己整理的话,也会让记忆持久一些。
例子:查询所有学生的资料(学号,姓名,性别,出生年月,家庭地址)
新建项目xxx,因为是自定义标签,所以就不用引入Struts的包了。
第一步:在tags包下,新建Java类,需继承javax.servlet.jsp.tagext.TagSupport,并编写代码如下:

Code:
  1. packagetags;
  2. importjava.io.IOException;
  3. importjava.util.ArrayList;
  4. importjavax.servlet.jsp.JspException;
  5. importjavax.servlet.jsp.JspWriter;
  6. importjavax.servlet.jsp.tagext.TagSupport;
  7. importpo.Student;
  8. importdao.StudentDao;
  9. //自定义标签的规范该标签的功能:显示所有的学生的详细资料
  10. //1、继承:javax.servlet.jsp.tagext.TagSupport
  11. //2、重写方法doEndTag和doStartTag(系统自动调用)
  12. publicclassDisplayAllTagsextendsTagSupport{
  13. privatestaticfinallongserialVersionUID=1L;
  14. publicDisplayAllTags(){
  15. System.out.println("displayaddtags构造函数");
  16. }
  17. publicintdoStartTag()throwsJspException{
  18. System.out.println("doStartTag函数");
  19. returnSKIP_BODY;//不实现标签的体,即空体标签。
  20. }
  21. publicintdoEndTag()throwsJspException{
  22. System.out.println("doEndTag函数");
  23. //查询数据库
  24. StudentDaostudentDao=newStudentDao();
  25. ArrayListarrayList=(ArrayList)studentDao.queryStus();
  26. //通过父类TagSupport的属性值pageContext取得相关的内置对象
  27. JspWriterout=pageContext.getOut();
  28. //遍历循环打印。
  29. try{
  30. out.println("<table>");
  31. out.println("<tr>");
  32. out.println("<td>学号</td>");
  33. out.println("<td>姓名</td>");
  34. out.println("<td>性别</td>");
  35. out.println("<td>出生年月</td>");
  36. out.println("<td>家庭住址</td>");
  37. out.println("</tr>");
  38. for(inti=0;i<arrayList.size();i++){
  39. Studentstudent=(Student)arrayList.get(i);
  40. out.println("<tr>");
  41. out.println("<td>"+student.getStuId()+"</td>");
  42. out.println("<td>"+student.getStuName()+"</td>");
  43. out.println("<td>"+student.getStuSex()+"</td>");
  44. out.println("<td>"+student.getStuBir()+"</td>");
  45. out.println("<td>"+student.getStuAdd()+"</td>");
  46. out.println("</tr>");
  47. }
  48. out.println("<table>");
  49. }catch(IOExceptione){
  50. e.printStackTrace();
  51. }
  52. //=============pageContext还可以get更多的内置对象。
  53. //pageContext.getRequest();
  54. //pageContext.getResponse();
  55. //pageContext.getSession();
  56. //pageContext.getServletContext();
  57. returnEVAL_PAGE;//
  58. }
  59. }


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

Code:
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEtaglibPUBLIC"-//SunMicrosystems,Inc.//DTDJSPTagLibrary1.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. <tag>
  9. <name>displayAll</name><!--标签名称-->
  10. <tagclass>tags.DisplayAllTags</tagclass><!--对应的类-->
  11. </tag>
  12. <!--有属性的标签-->
  13. <tag>
  14. <name>displayBySex</name>
  15. <tagclass>tags.DisplayBySexTags</tagclass>
  16. <attribute><!--对应标签的属性。-->
  17. <name>sex</name>
  18. <required>true</required><!--是必需写的属性,即没有写属性标签不能被正常使用-->
  19. </attribute>
  20. </tag>
  21. <!--1.两个属性2.属性不是必需3.属性可以用变量来赋值-->
  22. <tag>
  23. <name>displayBySA</name>
  24. <tagclass>tags.DisplayBySAtags</tagclass>
  25. <attribute>
  26. <name>sex</name>
  27. <required>false</required>
  28. </attribute>
  29. <attribute>
  30. <name>add</name>
  31. <required>true</required>
  32. <rtexprvalue>true</rtexprvalue><!--true:可以用表达式来表示-->
  33. </attribute>
  34. </tag>
  35. </taglib>


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

Code:
  1. <%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
  2. <%@tagliburi="displaytags"prefix="stu"%>
  3. <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
  4. <html>
  5. <head>
  6. <title>测试自定义标签</title>
  7. </head>
  8. <body>
  9. 打印学生的名单<br>
  10. <stu:displayAll></stu:displayAll>
  11. <br>打印学生的名单(一个属性的测试)<br>
  12. <stu:displayBySexsex="男"></stu:displayBySex>
  13. <br>打印学生的名单(两个属性的测试)<br>
  14. <stu:displayBySAadd="上海"></stu:displayBySA>
  15. </body>
  16. </html>


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

============================视频学习笔记=========

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值