`

web JSP页面按钮权限控制(tld标签标签类实现BodyTagSupport)

 
阅读更多
1.xxx-tags.tld(关联具体的tag类)

放在WEB-INF目录下

<?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.2.3</tlib-version>
  <jsp-version>1.2</jsp-version>
  <short-name>tms</short-name>
  <uri>/xxxx-tags</uri>
  <display-name>"Struts Tags"</display-name>
  <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>
                    
  <tag>
    <name>button</name>
    <tag-class>xxx.tag.ButtonTag</tag-class>
    <body-content>JSP</body-content>
    <description><![CDATA[Render a HTML href element that when clicked can optionally call a URL via remote XMLHttpRequest and updates its targets]]></description>
    <attribute>
      <name>code</name>
      <required>true</required>
      <rtexprvalue>false</rtexprvalue>
      <description><![CDATA[Set the html accesskey attribute on rendered html element]]></description>
    </attribute>
    <attribute>
      <name>xxId</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
      <description><![CDATA[Set the html accesskey attribute on rendered html element]]></description>
    </attribute>
    <attribute>
      <name>xxOnclick</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
      <description><![CDATA[Set the html accesskey attribute on rendered html element]]></description>
    </attribute>
     <attribute>
      <name>xxType</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
      <description><![CDATA[Set the html accesskey attribute on rendered html element]]></description>
    </attribute>
    <attribute>
      <name>xxClass</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
      <description><![CDATA[Set the html accesskey attribute on rendered html element]]></description>
    </attribute>
    <attribute>
      <name>xxValue</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
      <description><![CDATA[Set the html accesskey attribute on rendered html element]]></description>
    </attribute>
    </tag> 
</taglib>


2.xxx.tag.ButtonTag


public class ButtonTag extends BaseTag {

	
	private static final long serialVersionUID = 1L;

	
	private String xxValue;
	
	public String getXxValue() {
		return xxValue;
	}

	public void setXxValue(String xxValue) {
		this.xxValue = xxValue;
	}

	public String getHtml(){
		StringBuffer sb=new StringBuffer();
		String body=this.bodyContent.getString();
		sb.append("<button ");
		
		if(SysUtils.isNotEmpty(xxValue)){
			sb.append("  value=").append(xxValue);
		}
		sb.append(">");
		sb.append(body);
		sb.append("</button>");
		return sb.toString();
	}
}


BaseTag

BaseTag比较重要的方法是doEndTag进行用户是否有权限显示对应的tag


public abstract class BaseTag extends BodyTagSupport {

	private String workCode;
//其他标签类实现该方法
        protected abstract String getHtml();

	public String getWorkCode() {
		return workCode;
	}

	public void setWorkCode(String workCode) {
		this.workCode = workCode;
	}
	private static final long serialVersionUID = 1L;
//控制的关键
	@Override
	public int doEndTag() throws JspException {
		
		String autcode=getAutcodeByWorkCode();
		JSONObject user = (JSONObject)ServletActionContext.getRequest().getSession().getAttribute("USER_INFO");
		String[] auth = (String[])ServletActionContext.getRequest().getSession().getAttribute("USER_AUTH");
		if(user == null){
			return EVAL_PAGE;
		}
		if(autcode == null){
			try {
				pageContext.getOut().write(getHtml());
			} catch (IOException e) {
				e.printStackTrace();
			}
    	}else{
    		if(auth != null){
    			if(SysUtils.hasAuth(auth,workCode)){
    				try {
// 这句话是显示的关键
    					pageContext.getOut().write(getHtml());
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    	}
		return EVAL_PAGE;

	}
}


3.页面引用

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="/xxxx-tags"  prefix="cbm"%>  //对应tag文件中的uri内容
<cbm:button xxId="xx" code="权限码" xxType="button" xxClass="btn ">xx</cbm:button>
//权限的控制主要是与code进行交互				


1.BodyTagSupport主要是标签处理类需要与标签体交互时使用

2.BodyTagSupport三个重要方法
doStartTag(),doEndTag(),doAfterBody(),

doStartTag()方法是遇到标签开始时会呼叫的方法,其合法的返回值是EVAL_BODY_INCLUDE与SKIP_BODY,前者表示将显示标签间的文字,后者表示不显示标签间的文字;
doEndTag()方法是在遇到标签结束时呼叫的方法,其合法的返回值是EVAL_PAGE与 SKIP_PAGE,前者表示处理完标签后继续执行以下的JSP网页,后者是表示不处理接下来的JSP网页
doAfterBody()这个方法是在显示完标签间文字之后呼叫的,其返回值有EVAL_BODY_AGAIN与SKIP_BODY,前者会再显示一次标签间的文字,后者则继续执行标签处理的下一步。




分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    java+hibernate+jsp+tld+自定义标签分页

    本项目结合了Java、Hibernate、JSP以及TLD(Tag Library Descriptor)技术,实现了一个高效、易懂且实用的自定义标签分页解决方案。下面我们将详细探讨这些技术以及它们在分页中的应用。 首先,Java作为后端编程...

    jsp自定义标签开发+TLD文件元素详解+实例

    1. **创建标签处理类**:这个类需要实现JSP提供的特定接口,如`Tag`(适用于传统标签)或`SimpleTag`(适用于简化标签)。对于`SimpleTagSupport`,我们只需覆盖`doTag()`方法来实现标签的逻辑。 2. **定义TLD文件*...

    jsp 自定义标签实例

    通过定义TLD,创建处理类,然后在JSP页面中使用,开发者可以构建出自己的标签库,从而提高开发效率和代码质量。在给定的实例中,我们可以看到一个简单的自定义标签的实现和使用过程,涵盖了JSP自定义标签的基本流程...

    自定义tld标签库源码加视频

    通过在JSP页面中引入TLD文件,开发者可以在页面中使用自定义标签,简化视图层的编写。 在压缩包文件中,`make-Java-tld.fbr`可能是一个编译或构建自定义TLD标签库的工程文件,通常包含源代码、配置文件和编译脚本。...

    tld自定义标签基础入门demo

    在Java Web开发中,TLD(Tag Library Descriptor)文件是用于定义自定义JSP标签库的关键组件。TLD文件提供了一种方式,让开发者能够创建自己的标签,这些标签可以简化代码,提高可读性和可维护性。这个"tld自定义...

    jsp开发所用的几个tld文件

    TLD 文件是XML文档,用于定义自定义标签库,它描述了JSP页面中可使用的自定义标签及其行为。下面将详细阐述TLD文件以及与之相关的几个关键知识点。 1. **什么是TLD文件?** TLD文件是JSP标准标签库(JSTL)的一...

    jsp页面自定义标签的实现

    同时,由于业务逻辑被封装在标签处理类中,而不是直接写在JSP页面上,这样就降低了视图层和控制器层的耦合度,提高了代码的可测试性和可重用性。 在实际开发中,自定义标签库还可以结合EL(Expression Language)和...

    java tld标签打包

    Java TLD(Tag Library Descriptor)标签打包是一种在Java Web开发中常见的操作,它涉及到JSP标准标签库(JSTL)以及自定义标签库的创建和整合。在本例中,压缩包包含了c标签、ec标签和logic标签,这些都是用于增强...

    利用BodyTagSupport创建带标签体的自定义标签

    2. **实现标签类**:接下来,创建一个实现`MyTag`接口和`BodyTagSupport`类的类。在这个类中,你需要覆盖`doStartTag()`和`doEndTag()`方法,以及可能需要的其他方法,如`release()`来清理资源。例如: ```java ...

    JSP自定义标签学习笔记

    标签处理类负责处理标签逻辑,TLD文件描述了标签的元数据,如标签名称、属性、事件等,而导入声明则将标签库引入到JSP页面。 2.3 如何创建自定义标签 创建自定义标签需要编写处理类,继承自`javax.servlet.jsp....

    JSP标签,采用web.xml引入标签库描述文件

    在`jsptag03`这个压缩包中,可能包含了示例的TLD文件、标签处理类源码以及展示如何在JSP页面中使用这些标签的实例。这些资源可以帮助开发者更好地理解自定义标签的工作原理和实践方法。 总的来说,JSP自定义标签...

    c.tld fn.tld fmt.tld x.tld jstl.jar JSTL tld标签及jar包

    在Java Web开发中,JSTL(JavaServer Pages Standard Tag Library)是一个标准的标签库,它为JSP页面提供了一套强大的、可扩展的标签,用于处理常见的任务,如迭代、条件判断、国际化、XML处理等。JSTL的核心在于其...

    jsp自定义嵌套标签

    例如,在JSP页面中,我们可以通过嵌套标签来封装一系列操作,实现如条件判断、循环、数据处理等复杂的逻辑功能。 #### 二、自定义嵌套标签的创建流程 1. **编写标签处理器类**:自定义嵌套标签的核心在于其标签...

    权限标签的设计jsp标签

    权限标签的设计是Web开发中的一个重要概念,主要用于实现动态控制用户界面元素的可见性或可操作性,基于用户的权限。在给定的示例中,我们看到一个自定义JSP标签`&lt;privilege:enable&gt;`的实现,它根据特定的操作ID...

    jstl tld jsp中最常用到的tld文件

    JSTL,全称为JavaServer Pages ...总的来说,理解和掌握JSTL以及其TLD文件对于任何Java Web开发者来说都是至关重要的,它可以帮助我们编写出更加优雅、高效的JSP页面,同时也有助于提升整个项目的可维护性和可扩展性。

    jsp java自定义标签 实现分页 当前位置标签

    首先,自定义标签的实现基于Java的`TagSupport`或`BodyTagSupport`类。`TagSupport`适用于无内容体的简单标签,而`BodyTagSupport`则适用于包含内容体的标签,即标签内部可以包含HTML或其他JSP元素。在这个场景下,...

    JSP扩展——自定义标签

    总结来说,自定义JSP标签通过编写标记处理类和标记描述文件实现。标记处理类负责处理标签的逻辑,而TLD文件提供了元数据,将自定义标签与处理类关联起来。这个过程使得开发者可以创建具有特定功能的可重用组件,增强...

    自定义标签库

    1. 编写一个实现 Tag 接口的 Java 类,把页面 Java 代码移到这个 Java 类中(标签处理器类)。 2. 编写标签库描述符(TLD)文件,在 TLD 文件中把标签处理器类描述成一个标签。 自定义标签库的原理 自定义标签库的...

    tld自定义标签demo

    在Java Web开发中,TLD(Tag Library Descriptor)文件是一种用于定义自定义JSP标签的XML文件。TLD文件描述了标签库中的每个自定义标签的功能、属性、返回类型等元数据,使得开发者可以创建自己的标签库来扩展JSP...

Global site tag (gtag.js) - Google Analytics