jsp tag 自定义标签实现

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

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

首先自定义标签类:

[java]  view plain  copy
  1. package com.vanfon.p2p.admin.core;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.jsp.JspException;  
  5. import javax.servlet.jsp.tagext.TagSupport;  
  6.   
  7. import com.vanfon.p2p.entity.Admin;  
  8.   
  9. public class PermissionTag extends TagSupport {  
  10.   
  11.     /** 
  12.      *  
  13.      */  
  14.     private static final long serialVersionUID = 4592227792811389132L;  
  15.   
  16.   
  17.     @Override  
  18.     public int doStartTag() throws JspException {  
  19.         boolean result = false;  
  20.         HttpServletRequest request = (HttpServletRequest) this.pageContext  
  21.                 .getRequest();// 通过成员变量获取HttpServletRequest对象  
  22.         Admin admin = (Admin) request.getSession().getAttribute("admin");//获取登录到系统的用户  
  23.         if(admin!=null&&"1".equals(String.valueOf(admin.getIfsuper()))){  
  24.             result = true;  
  25.         }  
  26.         return result? EVAL_BODY_INCLUDE : SKIP_BODY;//EVAL_BODY_INCLUDE代表执行自定义标签中的内容,SKIP_BODY代表不执行自定义标签中的内容。  
  27.     }  
  28. }  


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

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2.   
  3. <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"  
  5.     version="2.0">  
  6.   
  7.     <description>p2p permission taglib</description>  
  8.     <display-name>permission taglib</display-name>  
  9.     <tlib-version>1.0</tlib-version>  
  10.     <short-name>p2p_admin</short-name>  
  11.     <!-- 在taglib.jsp文件中加上如下内容,<%@ taglib uri="<span style="font-family: Arial, Helvetica, sans-serif;">http://vanfon.p2p.cn</span>"   
  12.         prefix="p2p"%> uri中的值必须与标签<uri></uri>中的值一致,prefix名称随便取,取完后JSP那端的前缀名必须与这一致。 -->  
  13.     <uri>http://vanfon.p2p.cn/</uri>  
  14.   
  15.     <tag>  
  16.         <description>权限校验标签,有权限就显示标签体的内容,否则不显示</description>  
  17.         <name>permission</name><!-- 里面的内容是JSP文件中标签里面的<p2p:permission >permission -->  
  18.         <tag-class>com.vanfon.p2p.admin.core.PermissionTag</tag-class><!-- JSP文件中的自定义标签里面的值会传到PermissionTag类接受,PermissionTag类接受到的值决定是否要显示JSP文件中自定义标签的内容。 -->  
  19.         <body-content>JSP</body-content><!-- 里面的值代表<p2p:permission>只不能用在JSP中。 -->  
  20.     </tag>  
  21. </taglib>  


web,xml中加入:

[html]  view plain  copy
  1. <jsp-config>       
  2.             <taglib>  
  3.                 <taglib-uri>http://vanfon.p2p.cn/</taglib-uri>  
  4.                 <taglib-location>/WEB-INF/tlds/shiros.tld</taglib-location>   
  5.             </taglib>      
  6.   </jsp-config>  


最后在jsp中引入标签:

[java]  view plain  copy
  1. <%@ taglib prefix="p2p" uri="http://vanfon.p2p.cn/" %>  

使用标签:

[java]  view plain  copy
  1. <p2p:permission><a href="#" class="easyui-linkbutton" iconCls="icon-add" οnclick="openCreateDialog();">新增</a></p2p:permission>  
  2.             <p2p:permission ><a href="#" class="easyui-linkbutton" iconCls="icon-edit" οnclick="openUpdateDialog();">编辑</a></p2p:permission>  
  3.             <p2p:permission ><a href="#" class="easyui-linkbutton" iconCls="icon-remove" οnclick="del();">删除</a></p2p:permission>  



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


扩展

比如:

PermissionTag.java


[java]  view plain  copy
  1. public class PermissionTag extends TagSupport {  
  2.    
  3. private String module;//属性名必须与JSP自定义标签的属性名一样  
  4.    
  5. private String privilege;  
  6.    
  7. public String getModule() {  
  8. return module;  
  9. }  
  10.    
  11. public void setModule(String module) {  
  12. this.module = module;  
  13. }  
  14.    
  15. public String getPrivilege() {  
  16. return privilege;  
  17. }  
  18.    
  19. public void setPrivilege(String privilege) {  
  20. this.privilege = privilege;  
  21. }  
  22.    
  23. @Override  
  24. public int doStartTag() throws JspException {  
  25. boolean result = false;  
  26. Employee employee = this.pageContext.getRequest();//通过成员变量获取HttpServletRequest对象。  
  27. WebUtil.getEmployee((HttpServletRequest)this.pageContext.getRequest());//获取登录到系统的员工  
  28. SystemPrivilege methodPrivilege = new SystemPrivilege(new SystemPrivilegePK(this.getModule(), this.getPrivilege()));  
  29. for(PrivilegeGroup group : employee.getGroups()) {  
  30. if(group.getPrivileges().contains(methodPrivilege)) {  
  31. result = true;  
  32. break;  
  33. }  
  34. }  
  35. //EVAL_BODY_INCLUDE代表执行自定义标签中的内容,SKIP_BODY代表不执行自定义标签中的内容。  
  36. return result? EVAL_BODY_INCLUDE : SKIP_BODY;  
  37. }  
  38.    
  39. }  


shiros.tld

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2.   
  3. <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"  
  5.     version="2.0">  
  6.   
  7.     <description>p2p permission taglib</description>  
  8.     <display-name>permission taglib</display-name>  
  9.     <tlib-version>1.0</tlib-version>  
  10.     <short-name>p2p</short-name>  
  11.     <!-- 在taglib.jsp文件中加上如下内容,<%@ taglib uri="<span style="font-family: Arial, Helvetica, sans-serif;">http://vanfon.p2p.cn/</span>"   
  12.         prefix="p2p"%> uri中的值必须与标签<uri></uri>中的值一致,prefix名称随便取,取完后JSP那端的前缀名必须与这一致。 -->  
  13.     <uri>http://vanfon.p2p.cn/</uri>  
  14.   
  15.     <tag>  
  16.         <description>权限校验标签,有权限就显示标签体的内容,否则不显示</description>  
  17.         <name>permission</name><!-- 里面的内容是JSP文件中标签里面的<p2p:permission module="admin" privilege="delete">permission -->  
  18.         <tag-class>com.vanfon.p2p.admin.core.PermissionTag</tag-class><!-- JSP文件中的自定义标签里面的值会传到PermissionTag类接受,PermissionTag类接受到的值决定是否要显示JSP文件中自定义标签的内容。 -->  
  19.         <body-content>JSP</body-content><!-- 里面的值代表<p2p:permission module="admin" privilege="delete">只不能用在JSP中。 -->  
  20.         <attribute>  
  21.             <description></description>  
  22.             <name>module</name><!-- 里面的值代表JSP文件中自定义标签 <p2p:permission module="admin" privilege="delete">中的module。-->  
  23.             <required>true</required><!-- 里面的值代表在JSP文件中敲入自定义标签(<p2p:permission)的时候,自定义标签里面属性名称(module)不用手工去写会自动显示出来。 -->  
  24.             <rtexprvalue>false</rtexprvalue><!-- 里面的值代表JSP文件中自定义标签的属性的值不能用EL表达式(${})来表示,如果为true自定义标签的属性的值能用EL表达式(${})来表示。 -->  
  25.         </attribute>  
  26.         <attribute>  
  27.             <description></description>  
  28.             <name>privilege</name>  
  29.             <required>true</required>  
  30.             <rtexprvalue>false</rtexprvalue>  
  31.         </attribute>  
  32.     </tag>  
  33. </taglib>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值