日期:2014-05-16  浏览次数:20402 次

JSP自定义标签之日期显示

?????? 小弟不才,最近做了一个关于日期显示的JSP自定义标签,具体功能:可以自定义显示起始和结束时间,也可以传入初始化参数,文件一加载便可一显示。


????? 具体说明文档如下:

SelectDateTag使用说明:
    功能:该自定义标签为填充日期的下拉列表,包括三个下拉列表,分别为年月日,可以自定义设置下拉列表的起始和结束时间。
    使用方法:复制com.sjdd.tag包下的BaseTag.class和SelectDateTag.class,将WEB-INF/taglib下的
SelectDateTag.tld以相同目录存放到需要配置的项目中。
    在需要添加该自定义标签的JSP文件中加入如下代码:
    “
	<%@ taglib uri="/tagslib/SelectDate" prefix="SelectDate" %>
	<SelectDate:SelectDate name="begin" begin="20000101" end="20201231" init="20101231"/>
    ”
    参数说明:"name"为使用的部分下拉列表的名称及id(选填),具体形如"begin_year","begin_month","begin_day", 默认为"_year","_month","_day";
	          "begin"为下拉列表开始时间(选填),如果没有配置"init"也为默认时间,默认为"19900101";
              "end"为下拉列表结束时间(选填),默认为"20201231";
              "init"为初始化时间(选填),默认为当前日期。
    范例见:WebRoot/testSelectDate.jsp
    
    另:如果需要添加多个组件,则需要设置不同的name属性。

?

这是用于输出的父标签:

package com.sjdd.tag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
/**
 * 
 * @Description:基本标签
 * @author:bao
 * @date:Dec 19, 2010
 */
public class BaseTag extends TagSupport {

	private static final long serialVersionUID = 1L;

	public int outPrint(StringBuffer content) throws JspException {
		
		if(content==null){
			return EVAL_PAGE;
		}

		try {
			this.pageContext.getOut().write(content.toString());
		} catch (Exception e) {
			e.printStackTrace();
			throw new JspException();
		}

		return EVAL_PAGE;
	}
}

?

这是处理的主体标签类:

package com.sjdd.tag;

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

import javax.servlet.jsp.JspException;

import com.sjdd.tag.datebean.DateHandler;
import com.sjdd.tag.datebean.Option;

public class SelectDateTag extends BaseTag {

	private static final long serialVersionUID = 1L;

	// 下拉列表的名称,形如"begin_year","_year"
	private String name;
	// 开始日期
	private int begin = 19900101;
	// 结束日期
	private int end = 20201231;
	// 初始化日期,默认值为当前日期
	private int init;

	public String getName() {
		if(this.name==null){
			name="";
		}
		return name;
	}

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

	public int getBegin() {
		return begin;
	}

	public void setBegin(int begin) {
		int initBegin = DateHandler.varifyAsInit(begin, 19900101);
		this.begin = initBegin;
	}

	public int getEnd() {
		return end;
	}

	public void setEnd(int end) {
		int initEnd = DateHandler.varifyAsInit(end, 20201231);
		this.end = initEnd;
	}

	public int getInit() {
		if(init==0){
			init = DateHandler.getCurrentShortDate();
		}
		return init;
	}

	public void setInit(int init) {
		int initial = DateHandler.varifyAsInit(init, DateHandler.getCurrentShortDate());
		this.init = initial;
	}

	/**
	 * @Description:创建年下拉列表
	 * @return List<Option>
	 */
	public List<Option> buildYearOptions() {
		List<Integer> yearList = new ArrayList<Integer>();

		int beginYear = DateHandler.getYear(begin);
		int endYear = DateHandler.getYear(end);

		for (int i = beginYear; i <= endYear; i++) {
			yearList.add(i);
		}

		return Option.buildOptions(yearList);
	}

	public List<Option> buildMonthOptions() {
		List<Integer> monthList = new ArrayList<Integer>();

		for (int i = 1; i <= 12; i++) {
			monthList.add(i);
		}

		return Option.buildOptions(monthList);
	}

	public List<Option> buildDayOptions(int year, int month) {
		List<Integer> yearList = new ArrayList<Integer>();
		int maxDay = DateHandler.getMaxDayValue(year, month);

		for (int i = 1; i <= maxDay; i++) {
			yearList.add(i);
		}

		return Option.buildOptions(yearList);
	}

	@Override
	public int doEndTag() throws JspException {

		int yearValue = 2010;
		int monthValue = 1;

		StringBuffer content = new StringBuffer();
		content.append("<select name=\"").append(getName()).append("_year\" id=\"").append(name).append(
				"_year\" class=\"select\" onchange='"+getName()+"changeDay();'>