Java自定义简单标签实例

 更新时间:2013年07月20日 16:03:02   作者:  
Java自定义简单标签可以方便的在页面输出信息,并且对于权限的控制,和对于Jsp标签和servlet代码的分离有着很好的作用

下面将以权限的控制为例自定义一个标签:
一、标签类型

复制代码 代码如下:

<wxt:per uri="${pageContext.request.contextPath }/privilege/list"></wxt:per>

步骤:
1.自定义一个类PerssionTag 继承SimpleTagSupport(自定义标签一般都会继承这个类)
复制代码 代码如下:

package cn.com.liveuc.privilege.tag;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import cn.com.liveuc.privilege.model.Privilege;
import cn.com.liveuc.privilege.model.Resource;
import cn.com.liveuc.privilege.model.Role;
import cn.com.liveuc.privilege.model.User;
/**
 *
 * @说明   自定义标签
 */
public class PerssionTag extends SimpleTagSupport {

 //自定义标签属性,用于标签传入参数
 private String uri;

 //接收标签传入的参数
 public void setUri(String uri) {
  this.uri = uri;
 }
 @Override
 public void doTag() throws JspException, IOException {
  //获取用户登陆后保存的Session
  PageContext page = (PageContext) this.getJspContext();
  User user = (User) page.getSession().getAttribute("login");
  //如果用户登陆
  if(user != null) {
   //用户登陆判断用户权限
   List<String> list = new ArrayList<String>();
   //获取用户的角色
   Set<Role> role = user.getRole();
   for(Role r:role) {
    //获取角色对应的权限
    Set<Privilege> privilege = r.getPrivilege();
    for(Privilege p:privilege) {
     //获取权限对应的资源
     Set<Resource> res = p.getResource();
     for(Resource re:res) {
      list.add(re.getUri());
     }
    }
   }
   for(String ur:list) {
    //判断用户的权限
    if(ur.equals(uri)) {
     this.getJspBody().invoke(null); //有权限输出标签体内容
    }
   }
  }
 }
}

2.在WEB-INF下创建tld文件描述标签。
复制代码 代码如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 version="2.0"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
 <description><![CDATA["To make it easier to access dynamic data;
                    the Apache Struts framework includes a library of custom tags.
                    The tags interact with the framework's validation and internationalization features;
                    to ensure that input is correct and output is localized.
                    The Struts Tags can be used with JSP FreeMarker or Velocity."]]></description>
 <display-name>"Struts Tags"</display-name>
 <tlib-version>2.2.3</tlib-version>
 <short-name>s</short-name>
 <uri>/wxt</uri>
 <tag>
  <name>per</name><!-- 标签名 -->
  <tag-class>cn.com.liveuc.privilege.tag.PerssionTag</tag-class>
  <body-content>scriptless</body-content>
  <!-- 标签属性 -->
  <attribute>
   <name>uri</name><!-- 属性名称 -->
   <required>true</required><!-- 是否必须 -->
   <rtexprvalue>true</rtexprvalue><!-- 是否为动态标签 -->
  </attribute>
 </tag>
</taglib>

3.运用标签
在Jsp页面导入标签:
<A href="mailto:%@taglib prefix='wxt' uri='/wxt' %">%@taglib prefix="wxt" uri="/wxt" %</A>
运用标签:
<wxt:per uri="${pageContext.request.contextPath }/user/list">
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<a href="${pageContext.request.contextPath }/user/list" target="reight">用户管理</a>
</wxt:per>
用户权限包含uri资源的将会输出标签内容。 

相关文章

  • SpringBoot热部署配置过程

    SpringBoot热部署配置过程

    这篇文章主要介绍了SpringBoot热部署配置过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • Hibernate中使用HQLQuery查询全部数据和部分数据的方法实例

    Hibernate中使用HQLQuery查询全部数据和部分数据的方法实例

    今天小编就为大家分享一篇关于Hibernate中使用HQLQuery查询全部数据和部分数据的方法实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • mybatis的if判断integer问题

    mybatis的if判断integer问题

    这篇文章主要介绍了mybatis的if判断integer问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • springboot+mybatis配置控制台打印sql日志的方法

    springboot+mybatis配置控制台打印sql日志的方法

    这篇文章主要介绍了springboot+mybatis配置控制台打印sql日志的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java中的迭代和递归详解

    Java中的迭代和递归详解

    这篇文章主要给大家介绍了关于Java中的迭代和递归,文章显示分别介绍了Java中的迭代和递归,而后又介绍了迭代和递归的区别以及数形递归的相关内容,文中介绍的很详细,相信会对大家学习具有一定的参考借鉴价值,有需要的朋友们可以参考借鉴。
    2016-11-11
  • SpringBoot集成FTP与SFTP连接池流程

    SpringBoot集成FTP与SFTP连接池流程

    在项目开发中,一般文件存储很少再使用SFTP服务,但是也不排除合作伙伴使用SFTP来存储项目中的文件或者通过SFTP来实现文件数据的交互,这篇文章主要介绍了SpringBoot集成FTP与SFTP连接池
    2022-12-12
  • 子线程任务发生异常时主线程事务回滚示例过程

    子线程任务发生异常时主线程事务回滚示例过程

    这篇文章主要为大家介绍了子线程任务发生了异常时主线程事务如何回滚的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • 如何使用BigDecimal实现Java开发商业计算

    如何使用BigDecimal实现Java开发商业计算

    这篇文章主要介绍了如何使用BigDecimal实现Java开发商业计算,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • MyBatis之自查询使用递归实现 N级联动效果(两种实现方式)

    MyBatis之自查询使用递归实现 N级联动效果(两种实现方式)

    这篇文章主要介绍了MyBatis之自查询使用递归实现 N级联动效果,本文给大家分享两种实现方式,需要的的朋友参考下吧
    2017-07-07
  • Spring Boot(五)之跨域、自定义查询及分页

    Spring Boot(五)之跨域、自定义查询及分页

    这篇文章主要介绍了Spring Boot(五)之跨域、自定义查询及分页的的相关资料,需要的朋友可以参考下
    2017-04-04

最新评论