一、了解jsp自定义标签

  自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对tag handler的对象的操作,即当servlet执行时Web 容器调用那些操作。

  好处:1.JSP标签主要用来显示结果数据,用来沟通表示层和业务逻辑层,把页面美工工作和程序编写分开。

     2. 自定义标签方便JSP页面代码的维护,代码重用

二、按钮权限控制实例

1、创建处理标签的java类ButtonPermissionTag
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class ButtonPermissionTag extends TagSupport  {

    /**
     * 
     */
    private static final long serialVersionUID = 3995418178864580338L;
    
    private String name;
    
    public ButtonPermissionTag() {
    }
    
    @Override
    public int doStartTag() throws JspException {
	try {
	    if ("true".equals(name)) {
		return EVAL_BODY_INCLUDE;
	    }
	    return SKIP_BODY;
	} catch (Exception e) {
	    throw new RuntimeException("数据加载异常",e);
	}
    }

    public void setName(String name) {
	this.name = name;
    }
    

}
上边的java类继承了TagSupport, 重写了doStartTag方法,在方法里面实现我们想要的需求效果。

2、创建tld文件
<?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 version="2.0" xmlns="http://Java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
    <tlib-version>1.0</tlib-version>
    <jsp-version>2.0</jsp-version>
    <short-name>btn</short-name>
    <uri>http://test.com</uri>
<tag>  
  <name>hasPermission</name>  
  <tag-class>com.tarena.platform.base.tags.ButtonPermissionTag</tag-class>  
  <body-content>JSP</body-content>   
  <attribute>  
    <name>name</name>  
    <required>true</required>  
    <rtexprvalue>true</rtexprvalue>  
  </attribute>  
</tag>
</taglib>
3、在web.xml中配置标签
<jsp-config>
        <taglib>
           ......
        </taglib>
        <taglib>
           ......
        </taglib>
        <taglib>
            <taglib-uri>http://test.com</taglib-uri>
            <taglib-location>/WEB-INF/common/tag/button.tld</taglib-location>
        </taglib>
    </jsp-config>

4 、页面引用

先引入自定义标签

<%@taglib prefix="btn" uri="http://test.com" %>

在jsp页面中引用:

              <btn:hasPermission name="true">
	              <button type="button" class="btn btn-primary btn-sm" id="btn_reset">
	                    测试按钮
	              </button>
              </btn:hasPermission>
根据我们自定义的java类可知,当name=true时按钮显示,当name=false时,按钮隐藏。由此我们实现了简单的按钮权限控制。博友们可以根据此例做扩展,实现后台管理系统的权限控制。


三、标签中的静态常量

1、EVAL_BODY_INCLUDE:告诉服务器正文的内容,并把这些内容送入输出流 
SKIP_BODY:告诉服务器不要处理正文内容 
EVAL_PAGE:让服务器继续执行页面 
SKIP_PAGE:让服务器不要处理剩余的页面 
EVAL_BODY_AGAIN:让服务器继续处理正文内容,只有doAfterBody方法可以返回 
EVAL_BODY_BUFFERED:BodyTag接口的字段,在doStartTag()返回 

EVAL_BODY_INCLUDE、SKIP_BODY一般由doStartTag()返回,而EVAL_PAPGE、SKIP_PAGE由doEndTag()返回。

2、doStartTag()方法是遇到标签开始时会呼叫的方法,其合法的返回值是EVAL_BODY_INCLUDE与SKIP_BODY,前者表示将显示标签间的文字,后者表示不显示标签间的文字;

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐