栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

J2EE基础之自定义jsp标签

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

J2EE基础之自定义jsp标签

目录:

一,标签语言特点

二,自定义标签的开发及使用步骤

三,标签生命周期

四,c:if标签

五,c:set与c:out标签


大纲:

一,标签语言特点

1.标签形式

对   true     进行拆分         

  开始标签
 true                 标签体
 
            结束标签

2.标签分类:

  标签分类:控制标签:例如if foreach  数据标签:out   UI标签:input table   空标签:例如br,hr
  没有标签体也能在网页中输出内容 称为UI标签

 代码案例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>




Insert title here


true
false



 运行结果:

 二.自定义标签的开发及使用步骤

自定义标签的开发分为:

助手类(继承BodyTagSupport) 

标签库描述文件(.tld)(按住Ctrl键点击c:if即可进入,.tld文件必须放在WEB_INF目录下或者其子目录下)

JSP页面通过taglib指令导入标签库

实例:z:if

复制一份c标签原来的.tld文件改为ljj.tld

 助手类:继承BodyTagSupport 实现三个开发场景

 jsp页面:

 运行结果:

三.标签的生命周期

标签的生命周期 包括标签开发场景与返回值

三个开发场景:包括返回值

package com.ljj.tag;

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


public class DemoTag1 extends BodyTagSupport{
	
	@Override
	public int doStartTag() throws JspException {
		System.out.println("------------------doStarTag------------------");
//		return super.doStartTag();
		return EVAL_BODY_INCLUDE;
//		return SKIP_BODY;
	}
	
	@Override
	public int doAfterBody() throws JspException {
		System.out.println("------------------doAfterBody------------------");
		return super.doAfterBody();
//		return EVAL_BODY_AGAIN;
	}
	
	@Override
	public int doEndTag() throws JspException {
		System.out.println("------------------doEndTag------------------");
		return super.doEndTag();
//		return SKIP_PAGE;
//		return EVAL_PAGE;
	}
	
}

在对应的开发场景中改变其返回值可以达到一些别样的效果:

如:

跳过主体:

开发场景:doStartTag()

SKIP_BODY;

计算标签主体内容:

开发场景:doStartTag()

EVAL_BODY_INCLUDE;

再计算主体一次

开发场景:doAfterBody() 

EVAL_BODY_AGAIN;

跳过页面的后续部分

开发场景:doEndTag()

SKIP_PAGE;

计算页面的后续部分

开发场景:doEndTag()

EVAL_PAGE;

四:z:if

例1:跳过主体:开发场景:doStartTag()     返回SKIP_BODY;

标签库描述文件:

助手类:

package com.ljj.tag;

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


public class DemoTag1 extends BodyTagSupport{
	
	@Override
	public int doStartTag() throws JspException {
		System.out.println("------------------doStarTag------------------");
//		return super.doStartTag();
//		return EVAL_BODY_INCLUDE;
		return SKIP_BODY;
	}
	
	@Override
	public int doAfterBody() throws JspException {
		System.out.println("------------------doAfterBody------------------");
		return super.doAfterBody();
//		return EVAL_BODY_AGAIN;
	}
	
	@Override
	public int doEndTag() throws JspException {
		System.out.println("------------------doEndTag------------------");
		return super.doEndTag();
//		return SKIP_PAGE;
//		return EVAL_PAGE;
	}
	
	
	
}

jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://jsp.veryedu.cn" prefix="z" %>




Insert title here



true
false


asd
没有打印asd

运行结果:

 

例2: 将助手类中的返回值改变:计算标签主体内容:开发场景:doStartTag()  EVAL_BODY_INCLUDE;

 

 运行结果:

例3:再计算主体一次 开发场景:doAfterBody()  EVAL_BODY_AGAIN;   会陷入循环中

结果:

 

例4:跳过页面的后续部分  开发场景:doEndTag()  SKIP_PAGE;

 

 jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://jsp.veryedu.cn" prefix="z" %>




Insert title here



<%-- true
false

 --%>
asd
ffs
sfsf

结果:

 

 例5:计算页面的后续部分 

开发场景:doEndTag()

EVAL_PAGE;

 结果:

 

五:c:set与c:out标签

ljj.tld标签库描述文件




    
  JSTL 1.1 core library
  JSTL core
  1.1
  z
  http://jsp.veryedu.cn

  
    
        Provides core validation features for JSTL tags.
    
    
        org.apache.taglibs.standard.tlv.JstlCoreTLV
    
  

  
  	
    demo1
    
    com.ljj.tag.DemoTag1
 	 
    JSP
    
  

    
    if
    com.ljj.tag.IfTag
    JSP
    
        test
        true
        true
    
  
  
   
    set
    com.ljj.tag.SetTag
    JSP
    
        var
        true
        false
    
       
        value
        true
        true
    
  
  
   
    out
    com.ljj.tag.OutTag
    JSP
    
        value
        true
        true
    
  
  

c:set对应的助手类:com.ljj.tag.SetTag

package com.ljj.tag;

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


public class SetTag extends BodyTagSupport {
	private String var;
	private Object value;

	
	
	public String getVar() {
		return var;
	}



	public void setVar(String var) {
		this.var = var;
	}



	public Object getValue() {
		return value;
	}



	public void setValue(Object value) {
		this.value = value;
	}



	@Override
	public int doStartTag() throws JspException {
		pageContext.setAttribute(var, value);
		return super.doStartTag();
	}
	
}

c:out对应的助手类:com.ljj.tag.OutTag

package com.ljj.tag;

import java.io.IOException;

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


public class OutTag extends BodyTagSupport{
	private Object value;

	public Object getValue() {
		return value;
	}

	public void setValue(Object value) {
		this.value = value;
	}

	@Override
	public int doStartTag() throws JspException {
	JspWriter out = pageContext.getOut();
	try {
		out.print(value);
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	return super.doStartTag();
	}


	
}

运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/981352.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号