jsp标签(二)

jsp标签(out,if,set,select,forEach)
一、自定义标签源码
1、导包
jsp标签(二)_第1张图片
2、有些改变的out,if,set自定义标签

out标签:

package com.tang.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 static final long serialVersionUID = 1L;
		private Object value;		

		public OutTag() {
			super();
		}

		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.println(value==null?"":value);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				throw new RuntimeException(e);
			}
			return super.doStartTag();
		}		
		
}

if标签:

package com.tang.tag;

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

public class IfTag extends BodyTagSupport {
	
	private Boolean test;

	public IfTag() {
		super();
	}

	public Boolean getTest() {
		return test;
	}

	public void setTest(Boolean test) {
		this.test = test;
	}

	@Override
	public int doStartTag() throws JspException {
		if(test) {
			return EVAL_BODY_INCLUDE;
		}
		return SKIP_BODY;
	}	

}

set标签:

package com.tang.tag;

import java.util.List;

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

import com.tang.dao.DeptDao;
import com.tang.entity.Dept;

public class SetTag extends BodyTagSupport {
	
	private String value;//保存数据库的key
	private DeptDao deptDao = new DeptDao();
	
	public SetTag() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	public String getValue() {
		return value;
	}
	public void setValue(String value) {
		this.value = value;
	}
	public DeptDao getDeptDao() {
		return deptDao;
	}
	public void setDeptDao(DeptDao deptDao) {
		this.deptDao = deptDao;
	}

	@Override
	public int doStartTag() throws JspException {
		List list = deptDao.list();
		pageContext.setAttribute(value, list);
		return super.doStartTag();
	}

}

set标签中用到的entity包,dao包
entity包:

package com.tang.entity;

import java.io.Serializable;

public class Dept implements Serializable {

	private static final long serialVersionUID = 1L;
	
	private Integer DeptId;
	
	private String DeptName;
	
	public Dept() {
		super();
	}
	
	public Dept(Integer deptId, String deptName) {
		super();
		DeptId = deptId;
		DeptName = deptName;
	}

	public Integer getDeptId() {
		return DeptId;
	}

	public void setDeptId(Integer deptId) {
		DeptId = deptId;
	}

	public String getDeptName() {
		return DeptName;
	}

	public void setDeptName(String deptName) {
		DeptName = deptName;
	}

	@Override
	public String toString() {
		return "Dept [DeptId=" + DeptId + ", DeptName=" + DeptName + "]";
	}
}

dao包:

package com.tang.dao;

import java.util.ArrayList;
import java.util.List;

import com.tang.entity.Dept;

public class DeptDao {
	
	public List list(){
		//访问数据库
		List list = new ArrayList();
		list.add(new Dept(1, "教质部"));
		list.add(new Dept(2, "教学部"));
		list.add(new Dept(3, "财务部"));
		list.add(new Dept(4, "就业部"));
		return list;
	}

}

forEach标签:

package com.tang.tag;

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 List items;
	private String var;//保存集合中元素的key
	
	private String varStatus;//保存index,count属性的对象的key
	
	public static class Status{
		public int index = 0;

		public int getIndex() {
			return index;
		}

		public void setIndex(int index) {
			this.index = index;
		}
		
		public int getCount() {//s.count
			return this.index+1;
		}
		
		void increment() {
			this.index++;
		}
	}
	
	public ForEachTag() {
		super();
	}
	
	public List getItems() {
		return items;
	}
	public void setItems(List items) {
		this.items = items;
	}
	public String getVar() {
		return var;
	}
	public void setVar(String var) {
		this.var = var;
	}	
	
	public String getVarStatus() {
		return varStatus;
	}

	public void setVarStatus(String varStatus) {
		this.varStatus = varStatus;
	}

	@Override
	public int doAfterBody() throws JspException {
		Iterator it = (Iterator) pageContext.getAttribute("it");
		while(it.hasNext()) {
			if(null!=varStatus && !"".equals(varStatus)) {
				Status status = (Status) pageContext.getAttribute(varStatus);
				status.increment();
				pageContext.setAttribute(varStatus, status);
			}
			
			Object next = it.next();
			pageContext.setAttribute(var, next);
			return EVAL_BODY_AGAIN;
		}
		return super.doAfterBody();
	}
	@Override
	public int doStartTag() throws JspException {
		if(null!=varStatus && !"".equals(varStatus)) {
			pageContext.setAttribute(varStatus, new Status());
		}
		
		if(null!=items&& 0 != items.size()) {
			Iterator it = items.iterator();
			Object next = it.next();
			pageContext.setAttribute(var, next);
			pageContext.setAttribute("it", it);
			return EVAL_BODY_INCLUDE;
		}
		return super.doStartTag();
	}
	
	

}


select标签:

package com.tang.tag;

import java.util.List;

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

import org.apache.commons.beanutils.PropertyUtils;

public class SelectTag extends BodyTagSupport {
	
	private List items;
	
	private String name;
	
	private String valueKey;//保存option中的value的key
	
	private String textKey;//保存option中的text文本的key
	
	private String cssStyle;
	
	private String headKey;
	
	private String headValue;
	
	private String selectedOptionValue;//默认选中

	public SelectTag() {
		super();
		// TODO Auto-generated constructor stub
	}

	public List getItems() {
		return items;
	}

	public void setItems(List items) {
		this.items = items;
	}

	public String getName() {
		return name;
	}

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

	public String getValueKey() {
		return valueKey;
	}

	public void setValueKey(String valueKey) {
		this.valueKey = valueKey;
	}

	public String getTextKey() {
		return textKey;
	}

	public void setTextKey(String textKey) {
		this.textKey = textKey;
	}	

	public String getCssStyle() {
		return cssStyle;
	}

	public void setCssStyle(String cssStyle) {
		this.cssStyle = cssStyle;
	}
	
	public String getHeadKey() {
		return headKey;
	}

	public void setHeadKey(String headKey) {
		this.headKey = headKey;
	}

	public String getHeadValue() {
		return headValue;
	}

	public void setHeadValue(String headValue) {
		this.headValue = headValue;
	}	

	public String getSelectedOptionValue() {
		return selectedOptionValue;
	}

	public void setSelectedOptionValue(String selectedOptionValue) {
		this.selectedOptionValue = selectedOptionValue;
	}

	@Override
	public int doStartTag() throws JspException {
		JspWriter out = pageContext.getOut();
		try {
			String html = toHtml();
			out.println(html);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		return super.doStartTag();
	}
	
	private String toHtml() throws Exception{
		StringBuffer sb = new StringBuffer();
		
	   //");
		
		//
		if(null!=items && 0!=items.size()) {
			if(null!=headKey && !"".equals(headKey.trim())) {
				sb.append("");
			}
			
			Object value = null;
			Object text = null;
			
			for (Object object : items) {
				//反射
				value = PropertyUtils.getProperty(object, valueKey);
				text = PropertyUtils.getProperty(object, textKey);
				if(value.toString().equals(selectedOptionValue.trim())) {
					
					sb.append("");
				}
				else {
					sb.append("");
				}
			}
			
		}
		
		sb.append("");
		
		return sb.toString();
	}
}


二、自定义标签的描写文件(助手文件)





	zking 1.1 core library
	zking core
	1.1
	z
	/zking
	
	
  
    out
    com.tang.tag.OutTag
    empty
    
        value
        true
        true
    
  
  
  
    if
    com.tang.tag.IfTag
    JSP
    
        test
        true
        true
    
  
  
  
    forEach
    com.tang.tag.ForEachTag
    JSP
    
        items
        true
        true
    
    
        var
        true
        false
    
    
        varStatus
        false
        false
    
  
  
   
    set
    com.tang.tag.SetTag
    empty
    
        value
        true
        false
    
  
  
  
    select
    com.tang.tag.SelectTag
    JSP
    
        items
        true
        true
    
    
        name
        false
        false
    
    
        valueKey
        true
        false
    
    
        textKey
        true
        false
    
    
        cssStyle
        false
        false
    
     
        headKey
        false
        false
    
    
        headValue
        false
        false
    
    
        selectedOptionValue
        false
        false
    
  
  

三、jsp界面运行代码

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




首页


标签

<% List list = new ArrayList(); list.add("zs"); list.add("ls"); list.add("ww"); String name = "zs"; pageContext.setAttribute("name", name); request.setAttribute("names", list); %>

自定义out标签



自定义if标签

是你的好时机看上你

自定义set标签



自定义foreach标签

  • ${n },${s.index },${s.count }


自定义select标签

界面运行结果:
jsp标签(二)_第2张图片

你可能感兴趣的:(jsp标签(二))