本篇参考: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>元素,代表开始描述一个标记,其下子元素如下:
- <name>--为标记处理类起的标记名
- <tag-class>——指定标记处理类的全名(即带包的名字)
- <bodycontent>——标记体的类型,demo中没有使用(用到BodyTagSupport类,有兴趣可以研究下)
<tag>中的子元素<attribute>
- <name>——用于指定属性名称
- <required>——用于声明该属性是否为必需的
- <rtexprvalue>——属性值是否可以为request-time表达式,也就是类似于< %=…% >的表达式
(2)标签处理类各个主要方法以及返回值的意义总结:
相关推荐
JSP自定义标签JSP自定义标签JSP自定义标签JSP自定义标签JSP自定义标签JSP自定义标签
jsp自定义标签jsp自定义标签jsp自定义标签
本人自行研究JSP自定义标签的学习笔记 目录如下: 目录 一、概述 1 1.1 使用简单标签机制 2 1.2 使用标签文件 3 二 、自定义标签简介 3 2.1 自定义标签概念 3 2.2 标签相关概念 3 2.3 如何创建自定义标签 3 三、自...
jsp自定义标签jsp自定义标签jsp自定义标签jsp自定义标签
jsp 自定义标签 一个简单的自定义标签实现
使用jsp自定义标签的功能实现权限的控制。(如果用户没有某个模块的删除权限,就不现实这个删除按钮) 在整个项目中所有的页面都可以引入自定义的标签去做到权限的控制。 自定义标签文件 删除 可以控制页面中的每...
JSP自定义标签。在自定义标签的起始和结束标签之间的部分为标签体(Body)。 标签处理程序类:定义标签的行为,并在JSP引擎遇到自定义标签时调用执行。 标签库描述符(TLD)文件:描述标签库的XML文档,向JSP引擎...
在网上学习jsp自定义标签的时候, 出现了异常, 在网上寻找了好久, 都没有找到合适的答案, 自己通过摸索最后成功, 分享给大家, 希望能够帮助到你, 自定义标签不能放在java Project中, 只能在java web Project中才可以.
java jsp自定义标签非常好用大家下载学习java jsp自定义标签非常好用大家下载学习java jsp自定义标签非常好用大家下载学习java jsp自定义标签非常好用大家下载学习java jsp自定义标签非常好用大家下载学习java jsp...
创建JSP自定义标签.doc 创建JSP自定义标签.doc 创建JSP自定义标签.doc
jsp初学者实例,以及分页封装,下拉框绑定值封装
jsp、jstl自定义标签实现的分页,实现的还是比较好的,没有在request、session等范围保存过数据,在pageContext范围内保存过集合的数据, 实现的方法还是比较简单的,适用性还是比较广的,我是实在是没分了,平时也...
JSP自定义Table标签demo JSP自定义Table标签demo JSP自定义Table标签demo
jsp自定义嵌套标签 自定义嵌套标签的定义和使用
jsp自定义迭代标签 jsp自定义迭代标签
jsp自定义标签库实现数据列表显示,包括代码,文档,希望对大家有帮助.