`
oham_一1一
  • 浏览: 51440 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JSP自定义标签使用

阅读更多

 

本篇参考:http://210.34.136.253:8488/jsp/JSPChapter14.htm, 权当总结

 

 

一、demo —— 使用一个自定义标签<oham:ac /> 用于控制页面上的某些元素的访问(accessControl),在此只是简单模拟:



 

    1.设计思路,定一个path parameter userLev,'boss' 最高,“cap” 次之,“bird”菜鸟。

 当以{yoururl}?userLev=boss时,显示所有button,userLev=cap时,显示菜鸟根队长的,userLev=bird时只显示菜鸟。于是希望有如下形式的tag:

<oham:ac level="bird">
	<div id="birdDiv">
		<input style="width: 100px;" type="button" value="菜鸟" onclick="alert('菜鸟')" />
	</div>
</oham:ac>			
<oham:ac level="cap">
	<div id="capDiv">
		<input style="width: 100px;" type="button" value="队长" onclick="alert('队长')" />
	</div>
</oham:ac>
<oham:ac level="boss">
	<div id="bossDiv">
		<input style="width: 100px;" type="button" value="Boss" onclick="alert('Boss')" />
	</div>
</oham:ac>

 level标记为bird的标签内的元素将清凉(天朝TM的关键字审查,本想写naked的)示众,bird level以上的权限都能看见,cap的除了level标为boss的都能被看见,boss能看见全部。

 

 

2. 标签库描述文件,ac.tld:

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib
        PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
        "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_2.dtd">
<taglib>
	<tlib-version>1.3</tlib-version>
	<jsp-version>1.2</jsp-version>
	<short-name>oham</short-name>
	<uri>http://oham.taglib.org/taglibs/oham</uri>
	
	<tag>
		<name>ac</name>
		<tag-class>org.oham.taglib.AccessControlTag</tag-class>
		<description>
		 </description>
		 <attribute>
		    <name>level</name>
		    <required>true</required>
		    <rtexprvalue>false</rtexprvalue>
		</attribute>
	</tag>
	
</taglib>

 

 

 

  3.标签处理类,AccessControlTag.java:

 

package org.oham.taglib;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;

import org.apache.commons.lang.StringUtils;

public class AccessControlTag extends TagSupport{
	private static final long serialVersionUID = -3729948338268932922L;

	//接收自定义tag的level属性值 ,必须提供setter与getter
	private String level;
	
	
	@Override
	public int doStartTag() throws JspException {
		String userLev = pageContext.getRequest().getParameter("userLev");
		
		//若没有userLev路径变量当不合法user,不显示任何button,不等于"bird","cap","boss"的一样 
		if( userLev != null && "".equals(userLev) ) {
			return Tag.SKIP_BODY;
		}
		
		// user level 为boss的时候,显示所有button
		if( "boss".equals(userLev) )
			return Tag.EVAL_BODY_INCLUDE;

		//user level 为cap的时候,只显示菜鸟和队长button
		if( "cap".equals(userLev) ) {
			if( "boss".equals(level) ) {
				return Tag.SKIP_BODY;
			}else {
				return Tag.EVAL_BODY_INCLUDE;
			}
		}
		
		//user level 为bird的时候,只显示菜鸟button
		if( "bird".equals(userLev) ){
			if( userLev.equals(level) ) {
				return Tag.EVAL_BODY_INCLUDE;
			}
		}
		
		return Tag.SKIP_BODY;
	}
	
	
	@Override
	public int doEndTag() throws JspException {
		return Tag.EVAL_PAGE;
	}
	
	
	public String getLevel() {
		return level;
	}

	public void setLevel(String level) {
		this.level = level;
	}
	

}

 

 

 4.声明引用标签库,web.xml:

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<display-name>TestWebSphere</display-name>
	
	
	<!-- 声明对标签库文件的引用  -->
	<jsp-config>
		<taglib>
			<taglib-uri>http://oham.taglib.org/taglibs/oham</taglib-uri>
			<taglib-location>/WEB-INF/taglib/ac.tld</taglib-location>  <!-- 标签库文件存放路径  -->
		</taglib>
	</jsp-config>
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

 

 

 

5.最终页面代码,index.jsp:

 

<%@ taglib uri="http://oham.taglib.org/taglibs/oham" prefix="oham" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page language="java" contentType="text/html; charset=gb2312"
	pageEncoding="gb2312"%>
<html>
	<head>
		<title>index</title>
		<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
		<style type="text/css">
			.div-center-container {
		  		width: 50%;
				height: 50%;
				overflow: auto;
				margin: auto;
				position: absolute;
				top: 0; left: 0; bottom: 0; right: 0;
				background-color: 	#C4E1FF;
			}
			
			.div-button-bar {
				position: absolute;
				margin: auto;
				height:60px;
				top: 0; left: 0; bottom: 0; right: 0;
				padding: 10px 5px 10px 5px;
				text-align:center;
			}
			
			div#root {
				background-color: #CEFFCE;
				width: 100%;
				height: 100%;
				position: relative;
			}
			
			div#birdDiv {
				float: left;
				width: 25%; 
				background-color: #ffffff; 
				text-align: center;
				margin: auto;
				padding: 10px 15px 10px 15px ;
			}
			div#capDiv {
				float: left;
				width: 25%; 
				background-color: #ffff00; 
				text-align: center;
				margin: auto;
				padding: 10px 15px 10px 15px ;
			}
			div#bossDiv {
				float: left;
				width: 25%; 
				background-color: #ff0000; 
				text-align: center;
				margin: auto;
				padding: 10px 15px 10px 15px ;
			}
		</style>

	</head>
	<body>
		<div id="root">
			<div class="div-center-container">
				<div class="div-button-bar">
					<oham:ac level="bird">
						<div id="birdDiv">
					 		<input style="width: 100px;" type="button" value="菜鸟" onclick="alert('菜鸟')" />
						</div>
					</oham:ac>
					
					<oham:ac level="cap">
						<div id="capDiv">
					 		<input style="width: 100px;" type="button" value="队长" onclick="alert('队长')" />
						</div>
					</oham:ac>
					<oham:ac level="boss">
						<div id="bossDiv">
					 		<input style="width: 100px;" type="button" value="Boss" onclick="alert('Boss')" />
						</div>
					</oham:ac>
				</div>
				
		 	</div>
		</div>
	</body>
</html>

 

 

 

 二、总结一些概念

   (1).关于标签库描述文件,

   在tld 文件中,映射了标记名和处理程序类;

  • <tallib>元素,代表开始一个标记库的描述
  • <tlib-version>元素,代表标记库的版本
  • <jsp-version>元素,代表标记所支持的JSP 的版本
  • <jsp-version>元素,代表标记所支持的JSP 的版本
  • <short-name>,为标记库起别名,即<oham:ac>中的oham
  • <tag>元素,代表开始描述一个标记,其下子元素如下:              
  1. <name>--为标记处理类起的标记名
  2. <tag-class>——指定标记处理类的全名(即带包的名字)
  3. <bodycontent>——标记体的类型,demo中没有使用(用到BodyTagSupport类,有兴趣可以研究下)

  <tag>中的子元素<attribute>

  1. <name>——用于指定属性名称
  2. <required>——用于声明该属性是否为必需的
  3. <rtexprvalue>——属性值是否可以为request-time表达式,也就是类似于< %=…% >的表达式

(2)标签处理类各个主要方法以及返回值的意义总结:



 

 

 

 

 

 

 

 

 

  • 大小: 7.3 KB
  • 大小: 86.9 KB
分享到:
评论

相关推荐

    jsp 自定义标签的使用

    本教程将深入探讨JSP自定义标签的使用,同时结合实例介绍分页和下拉框绑定值的封装。 一、JSP自定义标签基础 1. **定义标签库(Tag Library)**:自定义标签首先需要定义一个TLD(Tag Library Descriptor)文件,它...

    jsp 自定义标签实例

    在JavaServer Pages (JSP) 技术中,自定义标签是扩展JSP功能的关键手段,它允许开发者创建可重用的组件,提高...在给定的实例中,我们可以看到一个简单的自定义标签的实现和使用过程,涵盖了JSP自定义标签的基本流程。

    JSP自定义标签学习笔记

    通过以上内容的学习,我们可以理解JSP自定义标签的基本原理,掌握创建和使用自定义标签的方法,从而提升JSP应用的开发效率和代码质量。在实际项目中,合理利用自定义标签,可以构建出模块化、易于维护的Web应用程序...

    jsp自定义标签 jsp自定义标签

    jsp自定义标签jsp自定义标签jsp自定义标签jsp自定义标签

    jsp权限控制,jsp自定义标签实现

    使用jsp自定义标签的功能实现权限的控制。(如果用户没有某个模块的删除权限,就不现实这个删除按钮) 在整个项目中所有的页面都可以引入自定义的标签去做到权限的控制。 自定义标签文件 删除 可以控制页面中的每...

    jsp自定义标签例子,能在Tomcat下直接运行

    总之,JSP自定义标签是提高JSP开发效率和代码复用性的重要工具,通过创建和使用自定义标签,我们可以构建出更加模块化、易于维护的Web应用程序。结合Tomcat这样的Servlet容器,可以快速地部署和测试这些自定义组件。

    jsp自定义标签库实现数据列表显示

    本文将详细讲解如何利用JSP自定义标签库实现数据列表的显示,以及涉及到的相关技术。 首先,`UserListTag.java` 是自定义标签的核心类,它继承了`javax.servlet.jsp.tagext.TagSupport` 或 `javax.servlet.jsp....

    jsp自定义标签报错的问题

    在使用JSP自定义标签时,开发者可能会遇到一些报错问题,这通常涉及到项目结构、类路径设置或自定义标签的编译与打包方式。在本文中,我们将深入探讨这些问题,以及如何解决“JspException”这个特定异常。 首先,...

    JSP自定义标签之自动完成框

    首先,我们要理解JSP自定义标签的概念。自定义标签是JSP的一种扩展机制,它允许开发者创建自己的标签库,以更加清晰和可维护的方式编写页面。自定义标签的实现通常涉及三个主要部分:标签库描述符(TLD)、标签处理...

    JSP自定义标签实例与详细讲解

    本教程将深入探讨JSP自定义标签的实例与详细讲解。 一、JSP自定义标签概述 JSP自定义标签是类似于HTML标签的自定义组件,但它们提供了更强大的功能,可以封装Java代码,提供复杂的业务逻辑。自定义标签通过TLD(Tag...

    JSP自定义标签之日期显示

    本篇将深入探讨“JSP自定义标签之日期显示”,以及如何通过自定义标签来优雅地处理日期格式化和展示。 首先,我们要理解JSP自定义标签的基本概念。自定义标签是JSP的一种扩展,它不是Java内置的标签,而是由开发者...

    jsp自定义标签编写的分页

    本教程将深入探讨如何利用JSP自定义标签来编写一个灵活、可扩展的分页系统,该系统不依赖于特定的数据库,具有很高的通用性。 首先,理解JSP自定义标签的工作原理至关重要。自定义标签由三部分组成:标签库描述符...

    jsp2.0 自定义标签和自定标签函数

    本文将深入探讨JSP 2.0中的自定义标签和自定义标签函数,以及如何配置和使用它们。 **一、自定义标签** 自定义标签是JSP中的一种高级特性,它允许开发者创建类似于HTML标签的自定义组件。这种组件可以封装复杂的...

    jsp自定义标签大全.rar

    本资源“jsp自定义标签大全”包含了一系列示例和详细教程,涵盖了从基础到高级的自定义标签使用方法,对于想要深入了解和掌握JSP自定义标签的开发者来说是一份宝贵的参考资料。通过学习和实践这些示例,你可以更好地...

    jsp自定义标签库注意事项

    以下是对JSP自定义标签库的详细解释和使用注意事项: 1. **自定义标签开发步骤** - **编写JAVA类**:你需要创建一个Java类来实现特定的接口,如`javax.servlet.jsp.tagext.TagSupport`或`javax.servlet.jsp.tagext...

    jsp自定义分页标签

    一、JSP自定义标签基础 JSP自定义标签是JSP技术的一部分,它允许开发者创建自己的标签,以扩展HTML或XML文档。这些自定义标签可以封装复杂的Java代码,使JSP页面更加清晰,易于理解和维护。自定义标签由两部分组成:...

    权威实用jsp自定义标签demo<select,checkbox,radio>

    综上所述,“权威实用jsp自定义标签demo,checkbox,radio&gt;”教程旨在帮助开发者掌握如何创建和使用与选择器相关的自定义标签,从而提升JSP开发的效率和质量。通过学习这个教程,你可以了解到自定义标签的核心概念、...

    JSP自定义标签的开发及使用

    本篇文章将深入探讨JSP自定义标签的开发与使用,以及如何通过实例`Demo1_JspTag`来理解这一过程。 首先,我们需要了解自定义标签的基本概念。自定义标签是JSP的一种扩展机制,它允许我们封装复杂的Java代码或业务...

    JSP自定义Table标签demo

    总结起来,"JSP自定义Table标签demo"是一个教育性的示例,它演示了如何利用JSP自定义标签的灵活性和强大功能,来创建复杂且可复用的组件,如动态表格。通过学习和理解这个demo,开发者可以提升自己的JSP开发能力,...

    掌握jsp自定义标签chm版

    本资料"掌握jsp自定义标签chm版"全面讲解了这一核心概念,旨在帮助开发者深入理解和熟练应用JSP自定义标签。 1. **自定义标签概述** JSP自定义标签是扩展JSP功能的一种方式,允许开发者创建自己的标签库,类似于...

Global site tag (gtag.js) - Google Analytics