jsp入门——3、自定义标签

jsp中所有的标签都实现了javax.servlet.jsp.JspTag接口,标签在jsp页面中被调用,标签对应一个java处理类,来处理逻辑,好处是可以让jsp页面尽量少写代码

建立自定义标签需要java处理类,tld文件(创建时选择xml把后缀改为tld),小例子结构如图

package com.customtage;

import java.io.IOException;

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

//属性
public class AttriTag extends TagSupport{

	private int count;
	public void setCount(int count) {
		this.count = count;
	}
	@Override
	public int doEndTag() throws JspException {
		// TODO Auto-generated method stub
		String str = "........眼睛花..........";
		
		for (int i = 0; i < count; i++) {
			try {
				pageContext.getOut().print(str+"<br>");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return super.doEndTag();
	}

}
package com.customtage;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;

public class HelloTag implements Tag{

	private PageContext pc;
	private Tag tg;
	
	//标签结束
	@Override
	public int doEndTag() throws JspException {
		// TODO Auto-generated method stub
		String str  = "标签标大哥....";
		//标签写到页面
		JspWriter out = pc.getOut();
		try {
			out.print(str);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//eval_page标签用完下面内容还要被继续执行
		return this.EVAL_PAGE;
	}

	@Override
	public int doStartTag() throws JspException {
		// TODO Auto-generated method stub
		return SKIP_BODY;
	}

	@Override
	public Tag getParent() {
		// TODO Auto-generated method stub
		return tg;
	}

	@Override
	public void release() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setPageContext(PageContext pc) {
		// TODO Auto-generated method stub
		this.pc = pc;
	}

	@Override
	public void setParent(Tag tg) {
		// TODO Auto-generated method stub
		this.tg = tg;
	}

}
package com.customtage;

import java.io.IOException;

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

public class HelloTag2 extends TagSupport{

	@Override
	public int doEndTag() throws JspException {
		// TODO Auto-generated method stub
		String str = "殴打标签标大哥.....";
		try {
			pageContext.getOut().print(str);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return super.doEndTag();
	}

}
package com.customtage;

public class Room {

	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
package com.customtage;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
//动态添加到数据库
public class RoomTag extends TagSupport{

	@Override
	public int doEndTag() throws JspException {
		// TODO Auto-generated method stub
		List list = list();
		String str ="<select>";
		for (int i = 0; i < list.size(); i++) {
			Room r = (Room) list.get(i);
			int id = r.getId();
			String name = r.getName();
			str+="<option value="+id+">"+name+"</option>";
		}
		str+="<select>";
		try {
			pageContext.getOut().print(str);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return super.doEndTag();
	}
		
	public static List list() {
		
		Room r1 = new Room();
		r1.setId(1);
		r1.setName("光光头狮子");
		Room r2 = new Room();
		r2.setId(2);
		r2.setName("超短耳朵兔子");
		Room r3 = new Room();
		r3.setId(3);
		r3.setName("超短脖子长颈鹿");
		Room r4 = new Room();
		r4.setId(4);
		r4.setName("超胖子眼镜蛇");
		
		List list = new ArrayList();
		list.add(r1);
		list.add(r2);
		list.add(r3);
		list.add(r4);
		return list;
	}

}
package com.customtage;

import java.io.IOException;

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

public class SelectTag extends TagSupport{

	@Override
	public int doEndTag() throws JspException {
		// TODO Auto-generated method stub
		String str ="<select>";
		str+="<option value=1>光头狮子</option>";
		str+="<option value=2>短耳朵兔子</option>";
		str+="<option value=3>短脖子长颈鹿</option>";
		str+="<option value=4>胖子眼镜蛇</option>";
		str+="<select>";
		try {
			pageContext.getOut().print(str);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return super.doEndTag();
	}

}

jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="HelloKit" prefix="h" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello尼玛的kitty</title>
</head>
<body>
<h:Hello/><br>
<h:Hello2/><br>
<h:select/><br>
<h:room/><br>
<h:attr count="10" />
</body>
</html>

效果图

猜你喜欢

转载自blog.csdn.net/Milan__Kundera/article/details/81516273