jsp tag 自定义标签实现按钮的显示

原创 2015年02月06日 10:29:21

前些天在一个项目中做了一个最基本的权限管理(标准的权限结构,用户-角色-菜单),后来需要精确地控制到按钮就想到了使用自定义标签(jsp tag)来处理按钮的显示与隐藏。

下面是我参考网上的资料自己写的一个自定义标签的demo:

首先自定义标签类:

package com.vanfon.p2p.admin.core;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

import com.vanfon.p2p.entity.Admin;

public class PermissionTag extends TagSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 4592227792811389132L;


	@Override
	public int doStartTag() throws JspException {
		boolean result = false;
		HttpServletRequest request = (HttpServletRequest) this.pageContext
				.getRequest();// 通过成员变量获取HttpServletRequest对象
		Admin admin = (Admin) request.getSession().getAttribute("admin");//获取登录到系统的用户
		if(admin!=null&&"1".equals(String.valueOf(admin.getIfsuper()))){
			result = true;
		}
		return result? EVAL_BODY_INCLUDE : SKIP_BODY;//EVAL_BODY_INCLUDE代表执行自定义标签中的内容,SKIP_BODY代表不执行自定义标签中的内容。
	}
}


在WEB-INF下新建文件夹tlds,然后创建文件shiros.tld

<?xml version="1.0" encoding="UTF-8" ?>

<taglib 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-jsptaglibrary_2_0.xsd"
	version="2.0">

	<description>p2p permission taglib</description>
	<display-name>permission taglib</display-name>
	<tlib-version>1.0</tlib-version>
	<short-name>p2p_admin</short-name>
	<!-- 在taglib.jsp文件中加上如下内容,<%@ taglib uri="<span style="font-family: Arial, Helvetica, sans-serif;">http://vanfon.p2p.cn</span>" 
		prefix="p2p"%> uri中的值必须与标签<uri></uri>中的值一致,prefix名称随便取,取完后JSP那端的前缀名必须与这一致。 -->
	<uri>http://vanfon.p2p.cn/</uri>

	<tag>
		<description>权限校验标签,有权限就显示标签体的内容,否则不显示</description>
		<name>permission</name><!-- 里面的内容是JSP文件中标签里面的<p2p:permission >permission -->
		<tag-class>com.vanfon.p2p.admin.core.PermissionTag</tag-class><!-- JSP文件中的自定义标签里面的值会传到PermissionTag类接受,PermissionTag类接受到的值决定是否要显示JSP文件中自定义标签的内容。 -->
		<body-content>JSP</body-content><!-- 里面的值代表<p2p:permission>只不能用在JSP中。 -->
	</tag>
</taglib>


web,xml中加入:

<jsp-config>     
            <taglib>
                <taglib-uri>http://vanfon.p2p.cn/</taglib-uri>
                <taglib-location>/WEB-INF/tlds/shiros.tld</taglib-location> 
            </taglib>    
  </jsp-config>


最后在jsp中引入标签:

<%@ taglib prefix="p2p" uri="http://vanfon.p2p.cn/" %>

使用标签:

<p2p:permission><a href="#" class="easyui-linkbutton" iconCls="icon-add" onclick="openCreateDialog();">新增</a></p2p:permission>
			<p2p:permission ><a href="#" class="easyui-linkbutton" iconCls="icon-edit" onclick="openUpdateDialog();">编辑</a></p2p:permission>
			<p2p:permission ><a href="#" class="easyui-linkbutton" iconCls="icon-remove" onclick="del();">删除</a></p2p:permission>



然后就ok了,以管理员的身份(ifsuper=1)登录系统表示可见,以普通用户的身份(ifsuper!=1)登录系统按钮将不可见,以上就是jsp tag自定义标签最简单的用法,仅仅只做了是否是管理员的判断,其实完整的应该是对所有用户进行一个通用的控制。


扩展

比如:

PermissionTag.java


public class PermissionTag extends TagSupport {
 
private String module;//属性名必须与JSP自定义标签的属性名一样
 
private String privilege;
 
public String getModule() {
return module;
}
 
public void setModule(String module) {
this.module = module;
}
 
public String getPrivilege() {
return privilege;
}
 
public void setPrivilege(String privilege) {
this.privilege = privilege;
}
 
@Override
public int doStartTag() throws JspException {
boolean result = false;
Employee employee = this.pageContext.getRequest();//通过成员变量获取HttpServletRequest对象。
WebUtil.getEmployee((HttpServletRequest)this.pageContext.getRequest());//获取登录到系统的员工
SystemPrivilege methodPrivilege = new SystemPrivilege(new SystemPrivilegePK(this.getModule(), this.getPrivilege()));
for(PrivilegeGroup group : employee.getGroups()) {
if(group.getPrivileges().contains(methodPrivilege)) {
result = true;
break;
}
}
//EVAL_BODY_INCLUDE代表执行自定义标签中的内容,SKIP_BODY代表不执行自定义标签中的内容。
return result? EVAL_BODY_INCLUDE : SKIP_BODY;
}
 
}


shiros.tld

<?xml version="1.0" encoding="UTF-8" ?>

<taglib 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-jsptaglibrary_2_0.xsd"
	version="2.0">

	<description>p2p permission taglib</description>
	<display-name>permission taglib</display-name>
	<tlib-version>1.0</tlib-version>
	<short-name>p2p</short-name>
	<!-- 在taglib.jsp文件中加上如下内容,<%@ taglib uri="<span style="font-family: Arial, Helvetica, sans-serif;">http://vanfon.p2p.cn/</span>" 
		prefix="p2p"%> uri中的值必须与标签<uri></uri>中的值一致,prefix名称随便取,取完后JSP那端的前缀名必须与这一致。 -->
	<uri>http://vanfon.p2p.cn/</uri>

	<tag>
		<description>权限校验标签,有权限就显示标签体的内容,否则不显示</description>
		<name>permission</name><!-- 里面的内容是JSP文件中标签里面的<p2p:permission module="admin" privilege="delete">permission -->
		<tag-class>com.vanfon.p2p.admin.core.PermissionTag</tag-class><!-- JSP文件中的自定义标签里面的值会传到PermissionTag类接受,PermissionTag类接受到的值决定是否要显示JSP文件中自定义标签的内容。 -->
		<body-content>JSP</body-content><!-- 里面的值代表<p2p:permission module="admin" privilege="delete">只不能用在JSP中。 -->
		<attribute>
			<description></description>
			<name>module</name><!-- 里面的值代表JSP文件中自定义标签 <p2p:permission module="admin" privilege="delete">中的module。-->
			<required>true</required><!-- 里面的值代表在JSP文件中敲入自定义标签(<p2p:permission)的时候,自定义标签里面属性名称(module)不用手工去写会自动显示出来。 -->
			<rtexprvalue>false</rtexprvalue><!-- 里面的值代表JSP文件中自定义标签的属性的值不能用EL表达式(${})来表示,如果为true自定义标签的属性的值能用EL表达式(${})来表示。 -->
		</attribute>
		<attribute>
			<description></description>
			<name>privilege</name>
			<required>true</required>
			<rtexprvalue>false</rtexprvalue>
		</attribute>
	</tag>
</taglib>


jsp中用法:

<p2p:permission privilege="add" module="admin"><a href="#" class="easyui-linkbutton" iconCls="icon-add" onclick="openCreateDialog();">新增</a></p2p:permission>


参考:http://blog.sina.com.cn/s/blog_a2de16f401016cpc.html


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zwx19921215/article/details/43560799

[解决]Jetty报错web-jsptaglibrary_1_2.dtd not found

原因:引入的jstl包不对。 所有jetty所需的jar包都应该从jetty-project工程中去取,这样就可以避免jar包引用错误的问题。   解决方式: 1. 确认你使用的Jetty版本,比如8...
  • sartner
  • sartner
  • 2013-12-14 01:02:19
  • 2267

Jsp 自定义tag标签

Jsp自定义tag标签自定义tag标签的好处程序员可以自定一些特定功能的标记, 用来封装代码, 达到分工, 重用性等多种好处.如何存放tag标签通常在web工程WEB-INF文件夹下创建tags文件夹...
  • yusimiao
  • yusimiao
  • 2015-07-10 22:15:21
  • 4314

开发第一个JSP自定义标签(Tag)

开发和使用JSP自定义标签过程:1.开发标签实现类.  HelloTag_Interface.java文件内容:import javax.servlet.jsp.tagext.Tag;import j...
  • lip009
  • lip009
  • 2006-10-10 22:39:00
  • 10135

jsp中Tag的使用(自定义标签)

Tag文件可以实现代码的复用,这些代码可能是许多JSP页面都需要的。为了能让一个Web应用中的JSP页面使用某一个Tag文件,必须把这个Tag文件存放到Tomcat服务器指定的目录中,也就是说,如果某...
  • djx123456
  • djx123456
  • 2012-07-12 17:49:53
  • 3803

JSP中的TAG

JSP标签有两种实现方法,一种是使用tag 文件,一种是使用tld文件。 1、使用tag文件 标签名和tag文件名一致, tag文件为JSP文件,可以有属性,把JSP页面当JavaBean文件一样使用...
  • hongweigg
  • hongweigg
  • 2013-09-25 11:43:47
  • 19159

JSP自定义标签(tag)

 什么是自定义标签?1,用户自定义的Java语言元素, 实质是运行一个或者两个接口的JavaBean;2,可以非常紧密地和JSP的表示逻辑联系在一起,又具有和普通JavaBean相同的业务逻辑处理能力...
  • kongfanyu
  • kongfanyu
  • 2009-11-03 14:13:00
  • 7580

shiro实现HasAnyPermission 标签效果

在使用shiro 的时候返现,有hasAnyRole 却没有hasAnyPermission的标签,感觉很疑惑,又是我控制页面的显示的后就是需要这种,比如:一个菜单下面有3个子菜单 |-菜单栏目一 ...
  • fun913510024
  • fun913510024
  • 2015-07-29 18:15:01
  • 6386

自定义(补充)shiro标签

shiro提供了jsp标签用于页面上的权限控制,vu
  • coolcaosj
  • coolcaosj
  • 2014-05-10 22:34:11
  • 5960

Apache Shiro Web应用整合-标签库

Apache Shiro 提供了一个JSP/GSP 标签库,它允许你控制你的JSP,JSTL 或GSP 页面基于当前Subject的状态进行输出。这对于根据用户身份和当前用户的授权状态来提供个性化视图...
  • peterwanghao
  • peterwanghao
  • 2013-03-29 09:45:06
  • 13706

Java for Web学习笔记(三六):自定义tag(4)自定义Tag文件

Tag文件中的Directives Tag文件和jsp很相似,也有不同,主要的不同在directives。Jsp的directive有include,taglib和page,但tag中有incl...
  • flowingflying
  • flowingflying
  • 2017-02-27 11:11:18
  • 2880
收藏助手
不良信息举报
您举报文章:jsp tag 自定义标签实现按钮的显示
举报原因:
原因补充:

(最多只允许输入30个字)