日期:2014-05-16 浏览次数:20469 次
?????? 小弟不才,最近做了一个关于日期显示的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();'>