在做开发中,我们会把一些比较经常使用到的代码封装起来,这样可以加快开发的速度和减少错误,并且在修改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. 基于thinkphp3.2.3开发的CMS内容管理系统(二)- Rbac用户权限

    基于thinkphp3.2.3开发的CMS内容管理系统 thinkphp版本:3.2.3 功能: --分类栏目管理 --文章管理 --商品管理 --用户管理 --角色管理 --权限管理 --友情链接管 ...

  2. 程序猿使用Python的tkinter库进行GUI编程肯定要会的事件处理

    事件类型用户通过鼠标.键盘.游戏控制设备在与图形界面交互时,就会触发事件.tkinter事件通常采用了将事件名称放置于尖括号内的字符串表示,尖括号中的内容我们称之为事件类型.事件类型有其通用的定义方式 ...

  3. 跟哥一起学Python(1) - python简介

    01—写在前面 我做了十几年的程序猿,码过代码.带过项目.做过产品经理.做过软件架构师.因为我是做通信设备软件的,面向底层操作系统,所以我的工作主要以C语言为主.Python在我的工作中通常用来写一些 ...

  4. 分治思想--快速排序解决TopK问题

    ----前言 ​ 最近一直研究算法,上个星期刷leetcode遇到从两个数组中找TopK问题,因此写下此篇,在一个数组中如何利用快速排序解决TopK问题. 先理清一个逻辑解决TopK问题→快速排序→递 ...

  5. 【BIM】BIMFACE中创建雾化效果

    背景 在BIM运维场景初始化的时候,一般都是首先将整个运维对象呈现在用户面前,例如一座大厦.一座桥梁.一个园区等等,以便于用户进行总览,总体把握运维对象,如果这个宏大的场景边界过于清晰,与背景融合也不 ...

  6. D - Silver Cow Party J - Invitation Cards 最短路

    http://poj.org/problem?id=3268 题目思路: 直接进行暴力,就是先求出举行party的地方到每一个地方的最短路,然后再求以每一个点为源点跑的最短路. 还有一种方法会快很多, ...

  7. ssh框架整合时的延迟加载问题(no session问题)的分析以及解决方案

    当我们整合完三大框架,并采用hibernate的延迟加载方案时,会出现如下的异常: 现在对这个异常进行分析,如下图所示(模拟通过id查询用户信息的过程): 上图分析了为什么会出现no session的 ...

  8. 错误:Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.

    Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The ...

  9. NEON中的vshr vshl vext中的位移参数必须为编译时字面常量

    NEON中的vshr指令中位移数量参数必须为compile time literal constant,因为该参数是被encoded as part pf ARM instruction itself ...

  10. 装完B就跑,这几个Linux指令真的Diǎo

    本文介绍一些有趣的指令,实用或者可以装逼,不妨自己也来试试看: 文章目录 1 故事的开局 2 杰哥的表演 2.1 sl 2.2 htop 2.3 gcp 2.4 hollywood 2.5 cmatr ...