JSP自定义标签01

目录

一.JSP自定义标签

 1.JSP标签库是什么?

 2.为什么要自定义标签

3.JSP自定义标签的生命周期

 二.JSP自定义标签流程


一.JSP自定义标签

 1.JSP标签库是什么?

 是一个JSP标签集合,它封装了JSP应用的通用核心功能, 基于JSP标签我们可以理解为,是JSP应该通用功能的一种封装方式。

 2.为什么要自定义标签

   在进行JSP页面显示处理的时候,有时候JSTL/Struts/Spring提供的标签库并不能满足项目中显示的需求,特别是对一些要求比较高的定制化服务中,可以使用自定义的标签库去处理。

3.JSP自定义标签的生命周期

 
 


 二.JSP自定义标签流程

  • 创建标签助手类,继承BodyTagSupport类。

   我们先定义一个out标签,继承BodyTagSupport类,该标签当val属性不为空时,页面上输出该值,如果val属性值为空,就输出defaultVal(默认值)的值。

代码如下:

  代码上面打了注释

package com.yjx.test;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class OutTag extends BodyTagSupport{

	 private String val;
	 private String defaultVal;
	 
	 
	public void setVal(String val) {
		this.val = val;
	}
	public void setDefaultVal(String defaultVal) {
		this.defaultVal = defaultVal;
	}
	 
	/**
	 * 继承BodyTagSupport类,需要将该方法重写,进行操作。
	 */
	@Override
	public int doStartTag(){
		//将数据写出到页面上
		//JspWriter 通过xx.pageContext.getOut();
		JspWriter out=this.pageContext.getOut();
		try {
		   //判断val值是否为空,为空的话输出defaultVal,不为空的话就输出val的值
			if(val==null||"".equals(val)) {
				out.print(defaultVal);
			}else {
				out.print(val);
			}
		} catch (Exception e) {
			
			e.printStackTrace();
		}
		//跳过的意思,当执行完了,就往下执行
		return SKIP_BODY;
	}
	
	
	
	
	
	
	
	 
}
  •    if标签助手类代码

    该标签判断是否为真,为真就输出该标签里面的内容,如果为假就不会输出标签里面的内容

package com.yjx.test;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class IfTag extends BodyTagSupport{

	 private boolean test;

	public void setTest(boolean test) {
		this.test = test;
	}
	
	
	 
	public boolean isTest() {
		return test;
	}


	 

	@Override
	public int doStartTag() throws JspException {
			if(isTest()) {

			 return EVAL_BODY_INCLUDE;
			}
			
		return SKIP_BODY;
	}  
	 
	

	
}
  •  创建标签库描述文件(tld),添加自定义标签的配置

   该文件格式xxx.tld,该文件请放在WEB-INF目录下面。

<!DOCTYPE taglib
  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
   "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
	<tlib-version>1.0</tlib-version>
	<jsp-version>1.2</jsp-version>
	<short-name>Simple Tags</short-name>
	<!--这里是可以换的,但是前面得加/ -->
	<uri>/zking1</uri>
	
	<tag>
	  <!-- 该标签的名字 -->
	  <name>out</name>
	   <!-- 将该类导入 -->
	  <tag-class>com.yjx.test.OutTag</tag-class>
	  <!-- 定义是否为空标签,空标签是指起始标签和结束标签没有值,例如</br> -->
	  <body-content>empty</body-content>
	  <!-- 设置属性 -->
	  <attribute>
	       <!-- 属性名字,该属性名字要与类中定义的属性名字相同 -->
	       <name>val</name>
	       <!-- 是否是必填,为true就是得要填,为false不是必须要填 -->
	       <required>true</required>
	       <!-- 设置是否可以使用EL表达式,设置为true就是可以使用,为false那就是不可以-->
	       <rtexprvalue>true</rtexprvalue>
	       <!--相当于一个标签的注解  -->
	       <description>out标签的val属性</description>
	  </attribute>
	  <!-- 定义out标签的defautVal属性 -->
	  <attribute>
	     <name>defaultVal</name>
	     <required>false</required>
	     <rtexprvalue>false</rtexprvalue>
	     <description>out标签的defaultVal属性</description>
	  </attribute>
	</tag>
	
	
	<tag>
	  <name>if</name>
	  <tag-class>com.yjx.test.IfTag</tag-class>
	  <body-content>jsp</body-content>
	  <attribute>
	   <name>test</name>
	    <required>true</required>
	   <rtexprvalue>true</rtexprvalue>
	   <description>if标签</description>   
	  </attribute>
	</tag>
	
	
</taglib>

标签详解:

  • <tag></tag>标签:里面放一个自定义标签的所有格式规范
  • <name></name>标签:该标签自定义名字
  • <tag-class></tag-class>标签:将标签助手类的完整类名放入。
  • <body-content></body-content>标签:在该标签里面填入empty就代表该标签为空标签,就类似于<br><input>标签,输入JSP就有标签体。
  •  <attribute></attribute>标签:在这个标签里写我们自定义标签的属性
  • <name></name>标签:在 <attribute>标签中的<name>是标签上的属性的名字,该属性名字要和助手类中的属性名字一样。
  • <required></required>标签:是否是必填,为true就是得要填,为false不是必须要填
  •  <rtexprvalue> </rtexprvalue>标签:设置是否可以使用EL表达式,设置为true就是可以使用,为false那就是不可以
  •  <description>out标签的val属性</description>:自定义属性的描述
  • 测试
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib  prefix="z" uri="/zking1"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
     
   
   <!-- out标签 --> 
   <z:out val="哈哈哈哈" defaultVal="hhhh"/>
    
    
    <z:if test="${1==1}">
              hhhhh
    </z:if>
</body>
</html>

 今天的学习就到这里啦!!!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值