在做开发中,我们会把一些比较经常使用到的代码封装起来,这样可以加快开发的速度和减少错误,并且在修改bug可以一次修改多次修复。那么在前端页面上,如果我们要经常用到公用的显示功能,并涉及到服务端逻辑操作的时候,我们就需要使用到自定义标签,自定义标签使我们可以很方便的去调用一段共同的代码。下面就来看看实现自定义标签的步骤。

一.我们需要创建一个标签类,继承自javax.servlet.jsp.tagext.TagSupport;

package com.babybus.sdteam.tag;

import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport; import com.babybus.sdteam.dao.StudentHibernateDao;
import com.babybus.sdteam.vo.Student; public class DisplayStudentAttributeTag extends TagSupport { /**
* 序列号
*/
private static final long serialVersionUID = 1L;
private int studentid;
private String classname; public int getStudentid() {
return studentid;
} public void setStudentid(int studentid) {
this.studentid = studentid;
} public String getClassname() {
return classname;
} public void setClassname(String classname) {
this.classname = classname;
} public DisplayStudentAttributeTag() {
System.out.println("DisplayStudentAttributeTag 构造函数");
} public int doStartTag() throws JspException {
System.out.println("doStartTag函数"); return SKIP_BODY; //不实现标签的体,即空体标签。
} public int doEndTag() throws JspException {
System.out.println("doEndTag函数");
// 查询数据库
StudentHibernateDao studentDao=new StudentHibernateDao();
Student querystudent = new Student();
querystudent.setId(this.getStudentid());
querystudent.setClassname(this.getClassname());
ArrayList<Student> arrayList = new ArrayList<Student>();
try {
arrayList = (ArrayList<Student>)studentDao.queryStudent(querystudent);
} catch (SQLException e1) {
e1.printStackTrace();
} // 通过父类TagSupport的属性值pageContext 取得相关的内置对象
JspWriter out=pageContext.getOut();
// 遍历循环打印。 try {
out.println("<table>");
out.println("<tr>");
out.println("<td>姓名</td>");
out.println("<td>年龄</td>");
out.println("<td>班级</td>");
out.println("</tr>");
for(int i=0;i<arrayList.size();i++){
Student student=(Student)arrayList.get(i);
out.println("<tr>");
out.println("<td>" + student.getStudentname() + "</td>");
out.println("<td>" + student.getAge() + "</td>");
out.println("<td>" + student.getClassname() + "</td>");
out.println("</tr>");
}
out.println("<table>");
} catch (IOException e) {
e.printStackTrace();
} return EVAL_PAGE;
}
}

第二.我们需要在WebRoot/WEB-INF下面新建一个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> <!-- JSP版本号 -->
<shortname>CustomTags</shortname> <!-- 标签名称-->
<uri>customtags</uri> <!-- 外界导入标签时,认识的名字,很重要。--> <tag>
<name>displayStudent</name> <!-- 标签名称 -->
<tagclass>com.babybus.sdteam.tag.DisplayStudentTag</tagclass> <!-- 对应的类 -->
</tag> <tag>
<name>displayStudentAttribute</name> <!-- 标签名称 -->
<tagclass>com.babybus.sdteam.tag.DisplayStudentAttributeTag</tagclass> <!-- 对应的类 -->
<attribute>
<name>studentid</name>
<required>true</required>
</attribute>
<attribute>
<name>classname</name>
<required>false</required>
</attribute>
</tag>
</taglib>

第三.在页面上引入标签,并使用

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="customtags" prefix="stu"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body style="overflow:auto;margin:0">
<stu:displayStudent>
</stu:displayStudent>
<stu:displayStudentAttribute studentid= "3" classname = "初三">
</stu:displayStudentAttribute>
</body>
</html>

以上就是自定义标签的实现步骤

结语

  • 受益,掌握了Struts2自定义标签

本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士)

转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4755806.html

[JavaWeb基础] 012.Struts2 自定义标签使用的更多相关文章

  1. javaweb基础(23)_jsp自定义标签

    一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 packag ...

  2. [JavaWeb基础] 013.Struts2 自定义类型转换器

    很多时候,我们在做web开发的时候经常要用到时间的转换器,Struts2给我们提供了一种类型转换器的接口.下面我们讲讲怎么实现吧. 1.首先我们要定义一个类型转换的类,继承自com.babybus.s ...

  3. Struts2自定义标签2自定义一个按班级id查询出该班级下的学生,存放进值栈,并遍历出来。

    Struts2自定义标签的流程概念: (1)需要两个类:标签类(继承相应的tag类),基本类(继承Component).标签类专门负责从客户端取得用户输入的一些属性,这个普通的jsp自定义标签一样,取 ...

  4. [JavaWeb基础] 014.Struts2 标签库学习

    在Struts1和Struts2中都有很多很方便使用的标签库,使用它可以让我们的页面代码更加的简洁,易懂,规范.标签的形式就跟html的标签形式一样.上面的篇章中我们也讲解了自定义标签那么在如何使用标 ...

  5. JavaWeb学习篇之----自定义标签&&JSTL标签库详解

    今天来看一下自定义标签的内容,自定义标签是JavaWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面 ...

  6. 超全面的JavaWeb笔记day13<JSTL&自定义标签>

    1.JSTL标签库(重点) core out set remove url if choose when otherwise forEach fmt formatDate formatNumber 2 ...

  7. Struts2自定义标签4自定义分页标签

    第一步:webroot/web-inf下的str.tld文件 <?xml version="1.0" encoding="UTF-8"?> < ...

  8. javaweb(二十三)——jsp自定义标签开发入门

    一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 packag ...

  9. javaweb带属性的自定义标签

    带属性的自定义标签: 1.先在标签处理器中定义setter方法,建议把所有的属性类型都设置为String类型. package com.javaweb.tag; import java.io.IOEx ...

随机推荐

  1. 一个简单的wed服务器SHTTPD(2)———— 客户端请求分析

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  2. 小白,你要的Java抽象类,操碎了心!

    自从给小白写了两篇科普性质的文章后,我就有点一发不可收拾,觉得很有必要继续写下去.因为有读者留言"鼓励"我说,"二哥,你真的是为小白操碎了心啊!"我容易吗?我. ...

  3. OSG程序设计之Hello World 2.0

    现在为Hello World添加一些键盘响应事件. //需要多添加两个库:osgGAd.lib.osgd.lib 代码如下: #include <osgDB/ReadFile> #incl ...

  4. 算法——Java实现队列

    顺序队列: 概念: 队列是一种先进先出的线性表,只允许在一端插入,另一端删除.允许插入的一端称为队尾,允许删除的一端称为队头 顺序队列的实现: import org.junit.jupiter.api ...

  5. Java IO流(二)

    目录 字节缓冲流 概述 BufferedOutputStream类 继承父类的共性成员方法 构造方法 BufferedInputStream类 继承自父类的方法: 构造方法 文件复制练习(增强版 使用 ...

  6. 高性能mysql第三版读书笔记3

    innodb以前不支持高并发,在搞病房下就是悲剧,全部卡在mutex(缓冲池mutex)上,现在通过线程调度器控制线程怎么进入内核访问数据,参数为innodb_thread_concurrency,它 ...

  7. 【Spark】通过创建DataFrame读取不同类型文件内容

    文章目录 读取文本文件 第一种方法:通过RDD配合case class转换DataFrame 步骤 一.创建测试所需的文本文件 二.在spark-shell中执行以下操作 第二种方法:通过sparkS ...

  8. STM32 CubeIDE无法进行调试的问题

    解决了由于一个很容易忽视的细节最终导致系统配置存在错误造成STM32 CubeIDE无法进行调试的问题: 文章目录 来龙去脉 解决方案 反思 来龙去脉 在享受CubeIDE快速和便捷的服务之后,生成了 ...

  9. Altera特殊管脚的使用

  10. Arrays.binarySearch的返回值

    如果查找的值包含在数组中,返回搜索的第一个值的下标: 如果查找的值不在数组中,返回(-插入点-1):插入点即为第一个大于此查找值的元素下标 插入点 为将该值插入数组的那一点:即第一个大于此键的元素下标 ...