在做开发中,我们会把一些比较经常使用到的代码封装起来,这样可以加快开发的速度和减少错误,并且在修改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. 图论--传递闭包(Floyd模板)

    #include<iostream> #include<cstring> #include<cmath> using namespace std; int dp[1 ...

  2. python(time 模块)

    一.Time 模块 1.时间戳 时间戳是指格林威治时间 1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒) 起至现在的总秒数 最早出现的 UNIX 操作系统考 ...

  3. RabbitMQ的使用(一)- RabbitMQ服务安装

    RabbitMQ的使用(一)- RabbitMQ服务安装 作者:markjiang7m2 原文地址:https://www.cnblogs.com/markjiang7m2/p/12769627.ht ...

  4. thinkphp下的Webshell&&php过D盾一句话

    环境: Thinkphp 5.0.15 PHP version:7.0.12 WAF: D盾 ,安全狗 Thinkphp 采用 MVC 模式  核心:模块 -> 控制器 –> 方法 思路: ...

  5. SpringCloudStream学习(四)TTL(存活时间)Dead Letter Exchanges(死信交换机)

    TTL(Time-To-Live and Expiration): RabbitMQ既能对队列设置TTL也能对消息设置TTL,消息TTL可以应用于单个队列.一组队列或应用于逐个消息. 如何给消息设置T ...

  6. Python Web实战:Python+Django+MySQL实现基于Web版的增删改查

    前言 本篇使用Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能,旨在快速入门Python Web,少走弯路.效果演示在项目实战最 ...

  7. Linux 内核代码风格

    文章目录 从编码风格错误开始 快速修改编码风格的工具 scripts/checkpatch.pl scripts/Lindent astyle Linux 内核代码风格 1) 缩进 2) 把长的行和字 ...

  8. Quartus II 中参数化模块库(LPM)的使用

    Quartus II  的LPM库所在的目录是\altera\11.0\quartus\libraries\megafunctions 现以LPM_MULT为例进行演示: 思路:1.首先创建一个pro ...

  9. [codeforces-542-C]YY?

    链接:http://codeforces.com/problemset/problem/542/C 题意:对一个函数f(x),定义域[1,n], 令f(k,x) = f(f(f(f...f(x)))) ...

  10. 管理环境一:venv

    初衷: 在工作的时候,我们会有很多个项目,每个项目使用的库的版本不一样,导致我们切换项目的时候会很麻烦. 比如:我有两个django项目,项目一使用的版本是 django 1.7 , 项目二使用的版本 ...