Java自定义简单标签

时间:2022-09-06 08:16:36
 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;
/**
*
* @作者 wuxiaotie
* @邮件 wuxiaotie@iactive.com.cn
* @说明 自定义标签
*/
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页面导入标签:

%@taglib prefix="wxt" uri="/wxt" %
运用标签:
<wxt:per uri="${pageContext.request.contextPath }/user/list">
      <a href="${pageContext.request.contextPath }/user/list" target="reight">用户管理</a>
</wxt:per>
用户权限包含uri资源的将会输出标签内容。

Java自定义简单标签的更多相关文章

  1. JSP自定义简单标签入门之带有属性

    上面写的那个简单标签来控制页面中标签内容的重复次数是固定的,这就是权限"写死了",这是非常不好的行为,因为其灵活性太差.所以下面就介绍一种使用属性来控制标签内容输出次数的方法. 准 ...

  2. Java自定义分页标签的实现

    主要字段含义: 页号 pagaNo页面大小 pageSize总记录条数 recordCount计算本次一共分多少页 myPageSize页号显示开始 start 页号显示结束 end PageTag需 ...

  3. 潭州课堂25班:Ph201805201 django框架 第五课 自定义简单标签,包含标签,模型类创建,梳理类创建 &lpar;课堂笔记&rpar;

    自定义标签同自定义过渡器一样,要创建文件,在配置文件中以APP方法注册,对方法进注册,在 html 文件中引入,.. 由模板传参 在 在配置文件中改时区: 由视图函数传参 包含标签: 当有这种重复的代 ...

  4. &lbrack;原创&rsqb;java WEB学习笔记40:简单标签概述(背景,使用一个标签,标签库的API,SimpleTag接口,创建一个自定义的标签的步骤 和简单实践)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. JSP自定义标签——简单标签&lpar;2&rpar;

    在前一篇博客中,我们已经学习了自定义的简单标签的基本使用方法,这一篇我们来学习如何在简单标签中添加标签属性.对自定义标签添加一些属性,可以使我们的标签功能更加灵活和复用.例如前一篇博客使用简单标签来对 ...

  6. JSP自定义标签——简单标签&lpar;1&rpar;

    前面一篇博客介绍了自定义标签的传统标签使用方式,但是我们会发现,使用传统标签非常的麻烦,而且接口还多,现在传统标签基本都没用了,除了一些比较久的框架.Sun公司之后推出了一个新的标签使用方式,称之为简 ...

  7. JSP自定义标签之简单标签入门

    在sun官方文档上有下面这样一段话. 官方文档声明 public interface SimpleTag extends JspTag Interface for defining Simple Ta ...

  8. 自定义简单的struts2的s标签

    一:自定标签前需要了解的知识: BodyTagSupport类的方法: 编写标签对应的实现类时,需要重载BodyTagSupport类几个方法:doStartTag(), setBodyContent ...

  9. JavaWeb学习记录(十九)——jstl自定义标签之简单标签

    一.简单标签共定义了5个方法: setJspContext方法 setParent和getParent方法 setJspBody方法 doTag方法 二.方法介绍 osetJspContext方法 用 ...

随机推荐

  1. C&num;动态数组ArrayList和List&lt&semi;T&gt&semi;的比较

    C#中一维动态数组(即列表)分ArrayList和List<T>两种,其容量可随着我们的需要自动进行扩充 一.ArrayList类(少用) ArrayList位于System.Collec ...

  2. Spring操作mongo排序,限制查询记录数

    Query query = new Query(); Criteria criteria = Criteria.where("timestamp").gt(from).lt(to) ...

  3. PHP获取当前日期或指定日期的所在月的第一天和最后一天

    <?php function getthemonth($date) { $firstday = date('Y-m-01', strtotime($date)); $lastday = date ...

  4. Mongodb安装和配置

    Mongodb之安装配置 安装 Mongodb的下载地址为Mongodb官网.下载时.你能够选择是安装包或者是压缩包. 下载完毕后.双击安装包并安装. 安装完毕后.你能够在安装文件夹看到下图中所见的文 ...

  5. 1&period;Office 365系列&lpar;-&rpar;

    //来源:http://www.cnblogs.com/JessZhou/p/3470654.html 首先从Office 365开始. Office 365是微软云计划的一部分,主要包括sharep ...

  6. 在linux系统下安装redis

    去官网找到合适的版本,可以直接下载下来,再用fxp上传,也可以直接以下面这种方式下载:$ wget http://download.redis.io/releases/redis-3.2.9.tar. ...

  7. &lbrack;Swift&rsqb;LeetCode189&period; 旋转数组 &vert; Rotate Array

    Given an array, rotate the array to the right by k steps, where k is non-negative. Example 1: Input: ...

  8. Cocos Creator cc&period;Button (脚本事件内容)

    cc.Class({extends: cc.Component,properties: {}, onLoad: function () { var clickEventHandler = new cc ...

  9. Python游戏编程入门3

    用户输入:Bomb Catcher游戏本章介绍使用键盘和鼠标获得用户输入.包括如下主题:学习pygame事件学习实时循环学习键盘和鼠标事件学习轮询键盘和鼠标的状态编写Bomb Catcher游戏 1本 ...

  10. A&ast;寻路初探(转载)

    启发式搜索:启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标.这样可以省略大量无畏的搜索路径,提到了效率.在启发式搜索中,对位置的估价是十分重要 ...