自定义JSTl标签-----满足自身需求(JSTL标签库无法满足需求时)

一.JSTL是:

apache开发的一套jsp标签,后来捐献给了sun,sun将其命名为jstl

二.JSTL的使用(ideal中)

1.导入jar包到pom文件中:

<!--jstl的jar--><dependency>  <groupId>javax.servlet</groupId>  <artifactId>jstl</artifactId>  <version>1.2</version>  <scope>runtime</scope></dependency>

2.jsp页面中使用taglib指令来导入jstl标签库中的标签

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

3.常见标签:

if标签: <c:if test=""></c:if>

forEach标签:<c:forEach var="" items=""></c:forEach>
choose标签:<c:choose></c:choose>

三:自定义jstl标签

步骤:

  1,准备好Java方法,继承BodyTagSupport类

package cn.com.util;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.tagext.BodyTagSupport;

import cn.com.dao.IPrivilegeDAO;
import cn.com.entity.Privilege;
import cn.com.entity.UserInfo;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
//标签
public class AuthorizeTag  extends BodyTagSupport {
    //你提供一个用户名字,我给一个用户拥有的权限集合,并且操作是在权限的DAO中
        private IPrivilegeDAO privilegeDAO;
        private String URL;
        public String getURL() {
            return URL;
        }  

        public void setURL(String uRL) {
            URL = uRL;
        }
        @Override
        public int doStartTag() {
            // 如果URL不空就显示URL,否则就不显
            if (null != URL) {
                getUserDao();
                HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
                UserInfo info=(UserInfo)request.getSession().getAttribute("userinfo");
                List<Privilege> list = privilegeDAO.findPrivilegeIdByUsername(info.getUserid());
                System.out.println(list.size());

                for (Privilege item : list) {
                    System.out.println(URL+"==========================");
                    if(item.getUrl().equals(URL)){
                          //正确渲染该标签
                          return EVAL_BODY_INCLUDE;
                    }
                }

            }
            return this.SKIP_BODY;
        }
        public void getUserDao() {
              WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(pageContext.getServletContext());
            privilegeDAO=(IPrivilegeDAO)applicationContext.getBean("IPrivilegeDAO");
        }

}

  2,创建一个tld文件,将准备的方法添加到tld文件中

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">
    <description>
    <![CDATA[security Tags]]>
    </description>
    <tlib-version>1.0</tlib-version>
    <short-name>security</short-name>
    <uri>http://www.springsecurity.org/jsp</uri>
    <tag>
        <description>
        <![CDATA[authorize Tag]]>
        </description>
        <name>authorize</name>
        <tag-class>
           cn.com.util.AuthorizeTag
        </tag-class>
        <body-content>JSP</body-content>
        <attribute>
            <name>URL</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
            <type>java.lang.String</type>
        </attribute>
    </tag>
</taglib>  

  3,然后就可以在jsp中调用了

然后你就能用了:

<Authorize:authorize URL="/role/addRole">   <a href="/role/addRole">添加角色</a></Authorize:authorize>

菜鸟一只,请多多关照,谢谢各路大神。。。!!!



原文地址:https://www.cnblogs.com/ruiannan/p/7898357.html

时间: 2024-10-02 23:25:18

自定义JSTl标签-----满足自身需求(JSTL标签库无法满足需求时)的相关文章

Android自定义View(LineBreakLayout-自动换行的标签容器)

??最近一段时间比较忙,都没有时间更新博客,今天公司的事情忙完得空,继续为我的自定义控件系列博客添砖加瓦.本篇博客讲解的是标签自动换行的布局容器,正好前一阵子有个项目中需要,想了想没什么难度就自己弄了.而自定义控件系列文章中对于自定义ViewGroup上次只是讲解了一些基础和步骤 Android自定义ViewGroup(四.打造自己的布局容器),这次就着这个例子我们来完成一个能在项目中使用的自定义布局容器. 1. 初步分析 ??首先我们看一看要完成的效果图: ?????? ??上面红色标示出的就

【自定义标签开发】04-简单标签库功能详解

我们回顾一下jsp的Tag自定义标签技术 我们的SimpleTag接口可以实现左边3种接口的功能. 这个接口的默认实现类是SimpleSupport. 接口中的方法有: doTag()//标签开始和结束都是在这个方法中定义,标签体是setJspBody方法中的JspFragment对象. 可以抛出SkipPageException,就相当于返回了"SKIP_PAGE",余下的jsp内容就不再执行了. getParent()//得到父标签对象 setJspBody(JspFragment

wordpress自定义标签云与随机获取标签的方法详解_php技巧 - PHP

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 wp_tag_cloud() 函数的作用是用来标签云的,可以根据每个标签所关联的文章次数来定义字体大小.标签排序等属性.从 2.8 版本开始,添加了 分类法(taxonomy)参数,这就意味着,除了 标签(tags)以外,还可以将 分类(Categories) 或其他 自定义分类法(Custom Taxonomies)作为“云”显示. 用法 <?php wp_tag_cloud( $args ); ?> 默认用法

EL与JSTL学习(二)——JSTL技术

1.JSTL概述 JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能. jstl出现的目的同el一样也是要代替jsp页面中的脚本代码. JSTL标准标签库有5个子库,但随着发展,目前常使用的是它的核心库 标签库 标签库的URI 前缀 Core http://java.sun.com/jsp/jstl/core c I18N http://java.sun.com/jsp/jstl/fmt fmt SQL http

Struts2中UI标签之非表单标签

1.非表单标签主要用于在页面生成一些非表单的可视化元素,例如Tab页面,输出HTML页面的树形结构等.当然,非表单标签也包含在页面显示Action里封装的信息,非表单标签主要有如下几个: a:生成一个超级连接(link). actionerror:如果Action实例的getActionError()方法返回不为null,则该标签负责输出该方法返回的系列错误. actionmessage:如果Action实例的getActionMessage()方法返回不为null,则该标签负责输出该方法返回的

dedecms5.7文章页的标签随机插入到内容中并且标签的地址为其标签关联的其他文章地址

dedecms5.7文章页的标签随机插入到内容中并且标签的地址为其他标签关联的文章地址 1 添加2个自定义函数 在dede/include/extend.func.php底部 添加如下代码 //根据文章ID 获取文章的标签 然后根据标签随机获取不是本地址的文章地址 function gettaglink($aid) { global $lit_imglist,$dsql; //思路整理 先根据文章ID 找标签ID 然后根据标签ID 找到不包括自己的文章ID 然后随机获取一个文章ID $dsql-

在thinkphp中,写的博文标签多对多关系的标签频率统计算法

常常看到别人的博客里面,或者网站里面有这样随机颜色,但字体大小与标签出现频率有关的标签云,于是自己就想写一个.至于颜色的随机显示,那就很简单了,这里就不列代码. 因为正在学thinkphp,所以数据查找的都是用的tp数据查找语句. 1 Public function render( $data ){ 2 //在博文——标签多对多关系的中间表中查找出所有的标签 3 $tags = M('blog_tags')->select(); 4 $a = array(); 5 //去掉重复的标签,将所有不重

PhpCMS标签:专题模块special标签

专题模块 专题模块PC标签调用说明 模块名:special 模块提供的可用操作 操作名 说明 lists 专题列表 content_list 专题信息列表 hits 专题信息点击排序 下面对所有的操作分开说明 专题列表(lists): 可用参数: 参数名 是否必须 默认值 说明 siteid 否 当前站点 站点ID elite 否 null 是否推荐 isthumb 否 null 必须有缩略图 listorder 否 null 排序方式 代码例子: {pc:special action="lis

标签案例-开发防盗链标签

1 package cn.itcast.web.tag; 2 3 import java.io.IOException; 4 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.http.HttpServletResponse; 7 import javax.servlet.jsp.JspException; 8 import javax.servlet.jsp.PageContext; 9 import