引入方式

  1. <%@ taglib prefix="bgt" uri="/WEB-INF/tlds/bgt.tld" %>

写法示例如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
  3. "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
  4. <taglib>
  5. <tlib-version>1.0</tlib-version>
  6. <jsp-version>2.0</jsp-version>
  7. <short-name>bgt</short-name>
  8. <!-- backGroundTag -->
  9. <uri>http://www.sdyy.tag</uri>
  10. <tag>
  11. <name>hasUrlPerm</name>
  12. <tag-class>com.sdyy.common.tags.HasUrlPermissionTag</tag-class>
  13. <attribute>
  14. <name>link</name>
  15. <required>false</required>
  16. <rtexprvalue>true</rtexprvalue><!-- 是否支持恶劣表达式 -->
  17. <type>java.lang.String</type>
  18. <description>示例:acApplication/forMain.do</description>
  19. </attribute>
  20. </tag>
  21. </taglib>

A、【判断标签】HasUrlPermissionTag标签是一个判断标签,通过该标签来决定标签包裹的内容是否显示,写法如下:

  1. package com.sdyy.common.tags;
  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.jsp.JspException;
  4. import javax.servlet.jsp.tagext.BodyTagSupport;
  5. import com.sdyy.common.spring.interceptor.PermissionInterceptor;
  6. /**
  7. *
  8. * @ClassName: HasUrlPermissionTag
  9. * @Description: 根据url判断权限标签
  10. * @author: liuyx
  11. * @date: 2015年12月21日上午11:15:32
  12. */
  13. public class HasUrlPermissionTag extends BodyTagSupport {
  14. private String link;// acApplication/forMain.do
  15. @Override
  16. public int doStartTag() throws JspException { // 在标签开始处出发该方法
  17. HttpServletRequest request=(HttpServletRequest) pageContext.getRequest();
  18. //获取session中存放的权限
  19. //判断是否有权限访问
  20. if (PermissionInterceptor.isOperCanAccess(request, link)) {
  21. //允许访问标签body
  22. return BodyTagSupport.EVAL_BODY_INCLUDE;// 返回此则执行标签body中内容,SKIP_BODY则不执行
  23. } else {
  24. return BodyTagSupport.SKIP_BODY;
  25. }
  26. }
  27. @Override
  28. public int doEndTag() throws JspException {
  29. return BodyTagSupport.EVAL_BODY_INCLUDE;
  30. }
  31. public String getLink() {
  32. return link;
  33. }
  34. public void setLink(String link) {
  35. this.link = link;
  36. }
  37. }

在JSP中的使用方式:

    <bgt:hasUrlPerm link="abc.do"><div>tttttttttttttttttest</div></bgt:hasUrlPerm>

B、【控件标签】,这种标签直接返回一个控件,不过是通过java代码生成的控件内容,写法示例:

  1. package com.sdyy.common.tags;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import javax.servlet.jsp.JspTagException;
  6. import javax.servlet.jsp.JspWriter;
  7. import javax.servlet.jsp.tagext.BodyTagSupport;
  8. /*import com.sdyy.base.ac.ac_permission.model.AcPermission;*/
  9. public class ButtonUrlTag extends BodyTagSupport {
  10. private static final long serialVersionUID = -7811902545513255473L;
  11. //标签属性用户名
  12. private String user = null;
  13. //标签属性操作url
  14. private String url = null;
  15. //标签属性 js方法
  16. private String jsmethod = null;
  17. //标签属性image 按钮图片
  18. private String image = null;
  19. //标签属性 alt 提示
  20. private String alt = null;
  21. //标签属性操作value 按钮文本
  22. private String value = null;
  23. /* 标签初始方法 */
  24. public int doStartTag() throws JspTagException{
  25. return super.EVAL_BODY_INCLUDE;
  26. }
  27. /* 标签结束方法 */
  28. public int doEndTag() throws JspTagException{
  29. pageContext.getSession();
  30. Boolean b = false;
  31. List list = new ArrayList();
  32. /*AcPermission p = new AcPermission();*/
  33. /*JDBCHibernate jdbca = new JDBCHibernate();*/
  34. try {
  35. /*list = jdbca.getHaveURLByUsernameList(user);*/
  36. } catch (Exception e1) {
  37. // TODO Auto-generated catch block
  38. e1.printStackTrace();
  39. }
  40. for(int i = 0;i < list.size(); i++){
  41. /*p = (AcPermission) list.get(i);*/
  42. if(1==1) {//p.getUrl().trim().equals(url.trim())){
  43. b = true;
  44. //如果jsmethod属性不为null 则把超链接href改为调用js
  45. if(jsmethod!=null){
  46. url = jsmethod;
  47. }
  48. }
  49. }
  50. JspWriter out = pageContext.getOut();
  51. if(b){
  52. try {
  53. //有权限 显示操作按钮
  54. out.println("<a href='" +url+ "' class='regular'><img src='" + image + "' alt='" + alt +"' />" + value + "</a>");
  55. } catch (IOException e) {
  56. e.printStackTrace();
  57. }
  58. }
  59. return super.SKIP_BODY;
  60. }
  61. /* 释放资源 */
  62. public void release(){
  63. super.release();
  64. }
  65. public String getUser() {
  66. return user;
  67. }
  68. public void setUser(String user) {
  69. this.user = user;
  70. }
  71. public String getUrl() {
  72. return url;
  73. }
  74. public void setUrl(String url) {
  75. this.url = url;
  76. }
  77. public String getImage() {
  78. return image;
  79. }
  80. public void setImage(String image) {
  81. this.image = image;
  82. }
  83. public String getAlt() {
  84. return alt;
  85. }
  86. public void setAlt(String alt) {
  87. this.alt = alt;
  88. }
  89. public String getValue() {
  90. return value;
  91. }
  92. public void setValue(String value) {
  93. this.value = value;
  94. }
  95. public String getJsmethod() {
  96. return jsmethod;
  97. }
  98. public void setJsmethod(String jsmethod) {
  99. this.jsmethod = jsmethod;
  100. }
  101. }



jsp tld 的tag 自定义标签扩展的更多相关文章

  1. java:jsp: 一个简单的自定义标签 tld

    java:jsp: 一个简单的自定义标签 tld 请注意,uri都是:http://www.tag.com/mytag,保持统一,要不然报错,不能访问 tld文件 <?xml version=& ...

  2. java:tag 自定义标签应用

    一,tag类 1.1 TagMy标签类,格式化当前日期并输出 package com.dkt.tag; import java.io.IOException; import java.text.Sim ...

  3. jsp的三种自定义标签 写法示例

    1.自定义方法标签 引入方式示例: <%@ taglib prefix="fns" uri="/WEB-INF/tlds/fns.tld" %> 写 ...

  4. 在jsp页面中使用自定义标签

    在某些场景中,自定义标签可封装大量代码,使页面变得更简洁,标签也可以很方便地在不同页面中实现通用而不必去粘贴大量的js代码.现在把最近做的一个自定义标签在这里总结一下.首先总结一下关于自定义标签的一些 ...

  5. JSP带有属性的自定义标签

    新建HelloWelTag类 如何添加jsp-api.jar包 HelloWelTag类详细代码```package bid.zhazhapan.fims.tag;import java.io.IOE ...

  6. JSP自定义标签(标签处理器 tld文件)

    标签的形式如下,标签处理器就是处理JSP页面中的标签的属性和内容,定义好之后就跟使用JSTL一样 <标签名 属性名="属性值" 属性名="属性值"> ...

  7. JSP自定义标签开发入门

    一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; 首先我们需要大致了解开发 ...

  8. 【JSP】自定义标签开发入门

    JSP 自定义标签 自定义标签是用户定义的JSP语言元素.当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时We ...

  9. JSP自定义标签——传统标签

    同JSP标签一样,自定义标签主要用于移除JSP页面中的Java代码,可以看到我们在JSP中其实是禁止使用Java脚本的,任何要想通过Java代码实现的功能都必须以标签形式来处理,可以使用JSP标签,J ...

随机推荐

  1. jQuery.toggleClass() 和detach()方法详解

    一.toggleClass()函数: toggleClass()函数用于切换当前jQuery对象所匹配的每一个元素上指定的css类名.所谓"切换",就是如果该元素上已存在指定的类名 ...

  2. [Python爬虫] 之十二:Selenium +phantomjs抓取中的url编码问题

    最近在抓取活动树网站 (http://www.huodongshu.com/html/find.html) 上数据时发现,在用搜索框输入中文后,点击搜索,phantomjs抓取数据怎么也抓取不到,但是 ...

  3. Java实现文件MD5加密

    代码实现: import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.s ...

  4. Shiro(4)默认鉴权与自定义鉴权

    =========默认鉴权======== 过滤链中定义: <!-- 过滤链定义 --> <property name="filterChainDefinitions&qu ...

  5. 在笛卡尔坐标系上描绘y=x^2-4/x^2-2x-3曲线

    <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type&quo ...

  6. iOS7重磅推新--不断尝试与重新设计的过程

    来源:GBin1.com iOS7重磅推新--不断尝试与重新设计的过程 或许你心里已经有了关于iPhone最新操作系统的评价,可能你喜欢它,也可能不喜欢,事实上大多数设计者不喜欢.设计界似乎一致认为I ...

  7. FEC

    什么是FEC http://zhidao.baidu.com/link?url=sbk7ue4n75HCbumrznBlAwdZAII8ZK2Xp3HTJ5BRkLJtDLFN3MGp9KOlrHVp ...

  8. $(document).ready()方法和window.onload()方法

    $(document).ready()方法和window.onload()方法 $(document).ready()方法是JQuery中的方法,他在DOM完全就需时就可以被调用,不必等待这些元素关联 ...

  9. Python的多进程编程

    Python在2.6引入了多进程的机制,并提供了丰富的组件及api以方便编写并发应用.multiprocessing包的组件Process, Queue, Pipe, Lock等组件提供了与多线程类似 ...

  10. iOS UITableView表视图滚动隐藏UINavigationController导航栏

    UITableView 继承于UIScrollView 所以UIScrollView 的代理方法相同适用于UITableView 中 隐藏导航栏的方法为: self.navigationControl ...