JSP自定义标签

1. 自定义标签开发步骤
1.1 助手类
1.2 tld
1.3 taglib

2. UI标签
z:out 1
m:select 5

注1:JspWriter writer = pageContext.getOut();

3. 控制标签
m:if 2
m:forEach 3

注1:page(pageContext)|request(…)|session(…)|application(…)
存储和交换数据

B compare

4. 数据标签
m:set 4

数据标签就是用来存储数据的

1、SetTag标签

package com.luoxiaogang.jsp02;
 
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
 
public class SetTag extends BodyTagSupport{
 
		
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private String var;
		private String value;
		
		public String getVar() {
			return var;
		}
 
		public void setVar(String var) {
			this.var = var;
		}
 
		public String getValue() {
			return value;
		}
 
		public void setValue(String value) {
			this.value = value;
		}
 
		@Override
		public int doStartTag() throws JspException {
			pageContext.setAttribute(var, value);
			return SKIP_BODY;
		}
 
	}

2、OutTag标签

package com.luoxiaogang.jsp02;
 
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
 
public class OutTag extends BodyTagSupport{
 
 
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String value;
		public String getValue() {
			return value;
		}
		public void setValue(String value) {
			this.value = value;
		}
		
	    @Override
	    public int doStartTag() throws JspException {
	    	JspWriter out = pageContext.getOut();
	    	try {
				out.print(value);
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			}
	    	return SKIP_BODY;
	    }
	}

3、IfTag标签

package com.luoxiaogang.jsp02;
 
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
 
public class IfTag extends BodyTagSupport{
 
	    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
		private boolean test;
		public boolean isTest() {
			return test;
		}
		public void setTest(boolean test) {
			this.test = test;
		}
	    @Override
	    public int doStartTag() throws JspException {
	    	return test ? EVAL_BODY_INCLUDE : EVAL_BODY_AGAIN;
	    }
	}

4、ForeachTag标签

package com.luoxiaogang.jsp02;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
 
public class ForeachTag extends BodyTagSupport{
 
	
	 /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
		private String var;
	    private List<Object> items=new ArrayList<Object>();
		public String getVar() {
			return var;
		}
		public void setVar(String var) {
			this.var = var;
		}
		public List<Object> getItems() {
			return items;
		}
		public void setItems(List<Object> items) {
			this.items = items;
		}
		
	    @Override
	    public int doStartTag() throws JspException {
	    	Iterator<Object> it=items.iterator();
	    	pageContext.setAttribute(var, it.next());
	    	pageContext.setAttribute("it", it);
	    	return EVAL_BODY_INCLUDE;
	    }
	    
	    @Override
	    public int doAfterBody() throws JspException {
	    	Iterator<Object> it = (Iterator<Object>) pageContext.getAttribute("it");
	    	if(it.hasNext()) {
	    		pageContext.setAttribute(var, it.next());
	    		pageContext.setAttribute("it", it);
	    		return EVAL_BODY_AGAIN;
	    	}else {	
	    		return EVAL_PAGE;
			}
	    }
	}

5、SelectTag标签

package com.luoxiaogang.jsp02;
 
 
 
	import java.lang.reflect.Field;
	import java.lang.reflect.InvocationTargetException;
	import java.util.ArrayList;
	import java.util.List;
 
	import javax.servlet.jsp.JspException;
	import javax.servlet.jsp.JspWriter;
	import javax.servlet.jsp.tagext.BodyTagSupport;
 
 
	import com.sun.org.apache.xml.internal.serializer.ToHTMLSAXHandler;
 
	public class SelectTag extends BodyTagSupport{
 
	    /**
		 * 
		 */
		private static final long serialVersionUID = 1L;
		
		private String id;
	    private String name;
	    private List<Object> items=new ArrayList<Object>();
	    private String textKey;
	    private String textVal;
	    private String headTextKey;
	    private String headTextVal;
	    private String selectVal;
		public String getId() {
			return id;
		}
		public void setId(String id) {
			this.id = id;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public List<Object> getItems() {
			return items;
		}
		public void setItems(List<Object> items) {
			this.items = items;
		}
		public String getTextKey() {
			return textKey;
		}
		public void setTextKey(String textKey) {
			this.textKey = textKey;
		}
		public String getTextVal() {
			return textVal;
		}
		public void setTextVal(String textVal) {
			this.textVal = textVal;
		}
		public String getHeadTextKey() {
			return headTextKey;
		}
		public void setHeadTextKey(String headTextKey) {
			this.headTextKey = headTextKey;
		}
		public String getHeadTextVal() {
			return headTextVal;
		}
		public void setHeadTextVal(String headTextVal) {
			this.headTextVal = headTextVal;
		}
		public String getSelectVal() {
			return selectVal;
		}
		public void setSelectVal(String selectVal) {
			this.selectVal = selectVal;
		}
		
		@Override
		public int doStartTag() throws JspException {
			JspWriter out = pageContext.getOut();
			try {
				out.print(ToHTML());
			} catch (Exception e) {
			}
			return super.doStartTag();
		}
		/**
		 * 方法
		 * @return
		 * @throws NoSuchFieldException
		 * @throws SecurityException
		 * @throws IllegalArgumentException
		 * @throws IllegalAccessException
		 * @throws InvocationTargetException
		 * @throws NoSuchMethodException
		 */
		private String ToHTML() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
			StringBuilder sb = new StringBuilder();
			sb.append("<select id='"+id+"' name='"+name+"'>");
			if(!(headTextKey==null || "".equals(headTextVal) || "".equals(headTextKey) || headTextVal==null)) {
				sb.append("<option value='"+headTextKey+"' selected> "+headTextVal+"</option>");
			}
			String val;
			String html;
			for (Object obj : items) {
				Field field = obj.getClass().getDeclaredField(textKey);
				field.setAccessible(true);
				 val = (String) field.get(obj);
				 Field field2 = obj.getClass().getDeclaredField(textVal);
					field2.setAccessible(true);
					 html = (String) field2.get(obj);
					 if(val.equals(selectVal)) {
						 sb.append("<option value='"+val+"' selected>"+html+"</option>");
					 }else {
						 sb.append("<option value='"+val+"'>"+html+"</option>");
					}
			}
			sb.append("</select>");
			return sb.toString();
		}
	    
	}

6、Stundent实体类

package com.luoxiaogang.jsp02;
 
public class Student {
	private String sid;
 
	private String sname;
 
	public Integer age;
 
	public Student() {
		super();
		System.out.println("调用无参构造方法创建了一个学生对象");
	}
 
	public Student(String sid) {
		super();
		this.sid = sid;
		System.out.println("调用带一个参数的构造方法创建了一个学生对象");
	}
 
	public Student(String sid, String sname) {
		super();
		this.sid = sid;
		this.sname = sname;
		System.out.println("调用带二个参数的构造方法创建了一个学生对象");
	}
 
	@SuppressWarnings("unused")
	private Student(Integer age) {
		System.out.println("调用Student类私有的构造方法创建一个学生对象");
		this.age = age;
	}
 
	public String getSid() {
		return sid;
	}
 
	public void setSid(String sid) {
		this.sid = sid;
	}
 
	public String getSname() {
		return sname;
	}
 
	public void setSname(String sname) {
		this.sname = sname;
	}
 
	public void hello() {
		System.out.println("你好!我是" + this.sname);
	}
 
	public void hello(String name) {
		System.out.println(name + "你好!我是" + this.sname);
	}
 
	@SuppressWarnings("unused")
	private Integer add(Integer a, Integer b) {
		return new Integer(a.intValue() + b.intValue());
	}

二、WEB-INF文件夹

lib文件夹:

commons-beanutils-1.8.0.jar
commons-logging.jar

jsp界面

<%@page import="com.jiangyong.jsp02.Student"%>
<%@page import="com.jiangyong.jsp02.Student"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="utf-8"%>
<!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>Insert title here</title>
</head>
<body>
<%
List list=new ArrayList();
list.add(new Student("s001","ningjie1"));
list.add(new Student("s002","ningjie2"));
list.add(new Student("s003","ningjie3"));
request.setAttribute("stu", list);
%>
<!-- 未选择 -->
<n:select headTextKey="-1" headTextVal="===请选择===" textVal="name" items="${stu }" textKey="id"></n:select>
<!-- 选择了 -->
<n:select headTextKey="-1" headTextVal="===请选择===" textVal="name" items="${stu }" textKey="id" selctedVal="s003"></n:select>
</body>
</html>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值