`
sw1982
  • 浏览: 511521 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

用Taglib实现--根据权限动态显示菜单栏

阅读更多
实现一个标签库,来辅助页面上的菜单根据权限动决定是否显示该菜单。

前提知识:

1. 前面写过一篇web中验证思路的文章,提到将用户的验证信息放到Session中,这里开发的标签就是基于这个思路。http://blog.csdn.net/d8111/archive/2008/04/19/2307512.aspx

2.RBAC角色权限控制模型,前面也写了一篇文章。http://blog.csdn.net/d8111/archive/2008/04/30/2348685.aspx

开始:

一。了解Taglib

1.自定义标签是用户定义的jsp语言元素。当包含自定义标签的jsp页面转换为servlet时,这个标签就转换为一个名为tag handler的对象上的操作。之后当jsp页面的servlet执行时,web容器就调用这些操作。

2.写一个Taglib需要做的事情

a) 一个tag就是一个普通的java类,它唯一特别之处是它必须继承TagSupport或者BodyTagSupport类。这两个类提供了一些方法,负责jsp页面和你编写的类之间的交互,例如输入,输出。至于这2个类的区别和需要继承实现的方法,强烈建议阅读javaEE-doc完全理解透(如果项目引用了spring,struts2等带有标签的框架,继承这些框架实现的Taglib父类可能会得到额外惊喜:) )

b)写一个.tld文件,来描述标签格式。 tld有基于dtd和Schema的2种不同格式配置,基于dtd的虽然比较老但是参考比较多,至于Schema我看了好多资料还是没弄明白配置格式...这里就不提了,默认全是dtd的实现。

c)在web.xml添加<taglib>项来读取标签格式。

具体Taglib格式不打算详述。下面写具体实现:

 

二。实现菜单的权限显示

1.这里要实现一个类似<s:if> 或者说是<c:if>类似的标签,带有参数url, 根据url是否属于权限,来决定是否显示标签内容中的菜单。

a)authentication.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/dtd/web-jsptaglibrary_1_2.dtd">

<taglib>

 <tlib-version>2.0</tlib-version>
 <jsp-version>1.2</jsp-version>
 <short-name>auth</short-name>
 <uri>/authentication</uri>
 <description>判断菜单权限</description>

 <tag>
  <name>showMenu</name>
  <tag-class>commons.utils.AuthenticationTag</tag-class>
  <body-content>JSP</body-content>
  <description>
  </description>
  <attribute>
   <name>url</name>
   <required>true</required>
   <rtexprvalue>false</rtexprvalue>
   <description>the menu url.</description>
  </attribute>
 </tag>
</taglib>

b)标签实现类

package commons.utils;

import java.util.Enumeration;
import java.util.List;

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

/**
 * 权限标签
 * 用法:
* <%@ taglib uri="/authentication" prefix="auth" %> * <!----><auth:showmenu url="abc">内容</auth:showmenu> * 如果内容对应的url在权限范围,则显示内容。否则,不显示内容 * @author Administrator * */ public class AuthenticationTag extends TagSupport { private String url; @Override public int doEndTag() throws JspException { // TODO Auto-generated method stub return super.doEndTag(); } @Override public int doStartTag() throws JspException { //取权限列表 List<string> urls = (List</string><string>)pageContext.getSession().getAttribute("userResource"); if(urls.contains(url)) { //包含权限,显示内容 return TagSupport.EVAL_BODY_INCLUDE; }else { //否则跳过 return TagSupport.SKIP_BODY; } } @Override public Object getValue(String k) { // TODO Auto-generated method stub return super.getValue(k); } @Override public Enumeration getValues() { // TODO Auto-generated method stub return super.getValues(); } @Override public void setPageContext(PageContext pageContext) { // TODO Auto-generated method stub super.setPageContext(pageContext); } @Override public void setValue(String k, Object o) { // TODO Auto-generated method stub super.setValue(k, o); } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } }</string>


c) web.xml新增配置

 <jsp-config>
  <taglib>
   <taglib-uri>/authentication</taglib-uri>
   <taglib-location>/WEB-INF/authentication.tld</taglib-location>
  </taglib>
 </jsp-config>

d)页面上的使用:

引入标签

<%@ taglib uri="/authentication" prefix="auth" %>  

然后用标签包含菜单html内容。

<auth:showMenu url="/info/info!">

<li id="tb1_2" class="normaltab" onclick="i:HoverLi(2);"><font color="#ffffff"><strong><a href="#" onclick="openInfo()" class="hot">信息管理</a></strong></font></li>

</auth:showMenu>


 

分享到:
评论

相关推荐

    pager-taglib-2.0

    同时,可以通过扩展Taglib提供的接口或者修改源码,实现更复杂的分页逻辑,比如跳跃分页、动态加载更多等。 5. **性能优化** 分页技术通常会结合缓存机制,比如使用 Ehcache 或 Redis 来存储部分数据,减少对...

    pager-taglib-2.0及使用方法

    - **显示模式**:可以选择显示固定的页码数量,或者根据总页数动态调整显示的页码范围。 ### 5. 示例代码 在`pager-taglib的安装和使用.txt`文件中,可能包含了更详细的使用示例和配置说明,建议参考该文件进行...

    struts-taglib-1.3.8.jar

    struts-taglib-1.3.8.jar struts-taglib-1.3.8.jar

    maven-taglib-plugin-1.2.2.jar

    maven-taglib-plugin-1.2.2.jar

    pager-taglib-2.0.rar

    5. **配置样式**:根据项目需求,通过CSS调整分页栏的外观。 通过以上步骤,开发者就可以利用"pager-taglib-2.0" 创建出美观且高效的分页效果,提升Web应用的用户体验。 **总结** "pager-taglib-2.0" 是一个强大...

    json-taglib-0.4.1.jar

    json-taglib-0.4.1.jarjson-taglib-0.4.1.jarjson-taglib-0.4.1.jarjson-taglib-0.4.1.jarjson-taglib-0.4.1.jar

    TagLib--多媒体解析库

    TagLib is a library for reading and editing the meta-data of several popular audio formats. Currently it supports both ID3v1 and ID3v2 for MP3 files, Ogg Vorbis comments and ID3 tags and Vorbis ...

    taglib-sharp.dll

    《TagLib-Sharp库在处理音频文件元数据时的应用与挑战》 TagLib-Sharp是一个强大的开源库,专...通过深入理解音频文件的元数据结构和编码机制,我们可以有效地利用TagLib-Sharp实现对音频文件的全面管理和自定义操作。

    struts-taglib-1.3.10.jar struts-taglib.jar taglib.jar

    struts-taglib-1.3.10.jar struts-taglib.jar taglib.jar

    taglib-standard-spec-1.2.5.jar

    taglib-standard-spec-1.2.5.jar是java EE标签库所需加吧

    maven-taglib-1.2-sources.jar

    maven-taglib-1.2-sources.jar

    alloy-taglib-1.1.14.jar

    alloy-taglib-1.1.14.jar,跑源码需要的jar包,需要的下载

    pager-taglib utf-8乱码解决

    在原pager-taglib 的基础上重新生成新的jar包,解决乱码问题。

    taglib-standard-jstlel-1.2.5.zip

    在JavaWeb开发中,`taglib-standard-jstlel-1.2.5.zip`是一个重要的组件,它包含了用于增强JSP(JavaServer Pages)功能的标签库。这个压缩包主要用于提供一套标准的标签,使得开发者能够更加方便地在JSP页面上进行...

    maven-taglib-plugin-2.4-sources.jar

    maven-taglib-plugin-2.4-sources.jar

    pager-taglib-2.0 JSP分页组件

    **描述分析:**"pager-taglib-2.0 JSP分页组件 包括jar包和安装使用说明" 暗示我们收到了这个组件的完整包,其中包含了运行所需的jar文件以及关于如何在项目中安装和使用的详细指南。这通常意味着我们可以直接将此...

    pager-taglib-ra2.0

    4. **使用方法**: pager-taglib分页标签库的使用通常涉及以下几个步骤: - 引入JAR:将pager-taglib-ra2.0.jar添加到项目的类路径中。 - 配置标签库:在JSP页面中通过`&lt;%@ taglib %&gt;`指令引入分页标签库。 - ...

Global site tag (gtag.js) - Google Analytics