JSP自定义标签使用

阅读更多

 

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

 

 

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


JSP自定义标签使用_第1张图片
 

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

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


	

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

 

 

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

 




	1.3
	1.2
	oham
	http://oham.taglib.org/taglibs/oham
	
	
		ac
		org.oham.taglib.AccessControlTag
		
		 
		 
		    level
		    true
		    false
		
	
	

 

 

 

  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:

 



	TestWebSphere
	
	
	
	
		
			http://oham.taglib.org/taglibs/oham
			/WEB-INF/taglib/ac.tld  
		
	
	
	
		index.jsp
	

 

 

 

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

 

<%@ taglib uri="http://oham.taglib.org/taglibs/oham" prefix="oham" %>

<%@page language="java" contentType="text/html; charset=gb2312"
	pageEncoding="gb2312"%>

	
		index
		
		

	
	
		

 

 

 

 二、总结一些概念

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

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

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

  中的子元素

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

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


JSP自定义标签使用_第2张图片
 

 

 

 

 

 

 

 

 

  • JSP自定义标签使用_第3张图片
  • 大小: 7.3 KB
  • JSP自定义标签使用_第4张图片
  • 大小: 86.9 KB
  • 查看图片附件

你可能感兴趣的:(jsp,自定义标签,示例)