Struts自定义日期控件

/**
* <pre>
* <strong>説明</strong>
* 年月日表示.<BR>
* </pre>
*
* <pre>
* <strong>注意事項:</strong>
* </pre>
*
* <pre>
* <strong>使用例:</strong>
* <tes:dateSelect />
* </pre>
*
* @author $$Author: tochou $$
* @version $$Revision: 1.1 $$ $$Date: 2010/08/24 04:29:25 $$TagUtils
*/
public class NDateSelect extends TagSupport {

private static final long serialVersionUID = 3570821152377804544L;

/** フォーム名称 */
private String name;

/** プロパティ*/
private String property;

/** 開始日かどうか **/
private Boolean isStart;

/** タブ順 **/
private int tabindex;

/**
* <TT><PRE>
* <p> タイトル表示処理 </p>
*
* @return SKIP_BODY
* @throws JspException
* 結果の出力に失敗したときにスローされます.
* @see javax.servlet.jsp.tagext.TagSupport#doStartTag() </PRE></TT>
*/
public int doStartTag() throws JspException {
final TagUtils tu = TagUtils.getInstance();

if (StringUtils.isEmpty(name) || StringUtils.isEmpty(property)) { return SKIP_BODY; }

tu.write(pageContext, createHtml());
return SKIP_BODY;
}

/**
* HTML生成処理
*
* @return String
*/
private String createHtml() throws JspException {
final StringBuffer sb = new StringBuffer();
// 年
int startYear = Integer.parseInt(KamsConst.DATASELECT_STARTYEAR);
int endYear = Integer.parseInt(KamsConst.DATASELECT_ENDYEAR);

int selectedYear = -1;
int selectedMonth = -1;
int selectedDay = -1;
//与FORM绑定的关键
String date = KAMSUtil.getString(TagUtils.getInstance().lookup(pageContext, name, property, null));
if (isStart && !KAMSUtil.isNULL(date)) {
selectedYear = Integer.parseInt(date.substring(0, 4));
selectedMonth = Integer.parseInt(date.substring(4, 6));
selectedDay = Integer.parseInt(date.substring(6, 8));
NSTagUtil.jsStrAdd(sb, "<input type='hidden' id='" + property + "Id' name='" + property + "' value='" + date + "'>");
} else if (!isStart && !KAMSUtil.isNULL(date)) {
selectedYear = Integer.parseInt(date.substring(0, 4));
selectedMonth = Integer.parseInt(date.substring(4, 6));
selectedDay = Integer.parseInt(date.substring(6, 8));
NSTagUtil.jsStrAdd(sb, "<input type='hidden' id='" + property + "Id' name='" + property + "' value='" + date + "'>");
} else {
NSTagUtil.jsStrAdd(sb, "<input type='hidden' id='" + property + "Id' name='" + property + "' value=''>");
}

NSTagUtil.jsStrAdd(sb, "<select id='year_" + property + "' tabindex='" + tabindex + "' οnchange='" + property + "_yearOnChange(this)'>");
NSTagUtil.jsStrAdd(sb, "<option value=''></option>");
for (int year = startYear; year <= endYear; year++) {
if (year == selectedYear) {
NSTagUtil.jsStrAdd(sb, "<option selected= 'selected' value='" + year + "'>" + year + "</option>");
} else {
NSTagUtil.jsStrAdd(sb, "<option value='" + year + "'>" + year + "</option>");
}
}
NSTagUtil.jsStrAdd(sb, "</select>年");
// 月
NSTagUtil.jsStrAdd(sb, "<select id='month_" + property + "' " + (selectedMonth != -1 ? "" : "disabled='disabled'") + " οnchange='" + property + "_monthOnChange(this.value)'>");
NSTagUtil.jsStrAdd(sb, "<option value=''></option>");
for (int month = 1; month <= 12; month++) {
if (month == selectedMonth) {
NSTagUtil.jsStrAdd(sb, "<option selected= 'selected' value='" + String.format("%02d", month) + "'>" + month + "</option>");
} else {
NSTagUtil.jsStrAdd(sb, "<option value='" + String.format("%02d", month) + "'>" + month + "</option>");
}
}
NSTagUtil.jsStrAdd(sb, "</select>月");
// 日
NSTagUtil.jsStrAdd(sb, "<select id='day_" + property + "' " + (selectedDay != -1 ? "" : "disabled='disabled'") + " οnchange='" + property + "_dayOnChange(this)'>");
NSTagUtil.jsStrAdd(sb, "<option value=''></option>");
for (int day = 1; day <= 31; day++) {
if (day == selectedDay) {
NSTagUtil.jsStrAdd(sb, "<option selected= 'selected' value='" + String.format("%02d", day) + "'>" + day + "</option>");
} else {
NSTagUtil.jsStrAdd(sb, "<option value='" + String.format("%02d", day) + "'>" + day + "</option>");
}
}
NSTagUtil.jsStrAdd(sb, "</select>日");

// スクリプト
NSTagUtil.jsStrAdd(sb, "<script type='text/javascript'>");
NSTagUtil.jsStrAdd(sb, "var MonHead = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];");
NSTagUtil.jsStrAdd(sb, "function " + property + "_yearOnChange(obj) {");
NSTagUtil.jsStrAdd(sb, " var date = document.getElementById('" + property + "Id');");
NSTagUtil.jsStrAdd(sb, " var month = document.getElementById('month_" + property + "');");
NSTagUtil.jsStrAdd(sb, " var day = document.getElementById('day_" + property + "');");
NSTagUtil.jsStrAdd(sb, " if(obj.value == '') {");
NSTagUtil.jsStrAdd(sb, " month.disabled = 'disabled';");
NSTagUtil.jsStrAdd(sb, " day.disabled = 'disabled';");
NSTagUtil.jsStrAdd(sb, " month.selectedIndex = 0;");
NSTagUtil.jsStrAdd(sb, " day.selectedIndex = 0;");
NSTagUtil.jsStrAdd(sb, " date.value = '';");
NSTagUtil.jsStrAdd(sb, " return;");
NSTagUtil.jsStrAdd(sb, " } else {");
NSTagUtil.jsStrAdd(sb, " month.disabled = '';");
NSTagUtil.jsStrAdd(sb, " day.disabled = '';");
NSTagUtil.jsStrAdd(sb, " var MMvalue = month.options[month.selectedIndex].value;");
NSTagUtil.jsStrAdd(sb, " var DDvalue = day.options[day.selectedIndex].value;");
if (isStart) {
NSTagUtil.jsStrAdd(sb, " date.value = obj.value + (MMvalue == '' ? '01' : MMvalue) + (DDvalue == '' ? '01' : DDvalue);");
} else {
NSTagUtil.jsStrAdd(sb, " date.value = obj.value + (MMvalue == '' ? '12' : MMvalue) + (DDvalue == '' ? '31' : DDvalue);");
}
NSTagUtil.jsStrAdd(sb, " if (MMvalue == '') return;");
NSTagUtil.jsStrAdd(sb, " var n = MonHead[MMvalue - 1];");
NSTagUtil.jsStrAdd(sb, " if (MMvalue == 2 && isLeapYear(obj.value)) {");
NSTagUtil.jsStrAdd(sb, " n++;" + property + "_writeDay(n);");
NSTagUtil.jsStrAdd(sb, " }");
NSTagUtil.jsStrAdd(sb, " }");
NSTagUtil.jsStrAdd(sb, "}");
NSTagUtil.jsStrAdd(sb, "function " + property + "_monthOnChange(val) {");
NSTagUtil.jsStrAdd(sb, " var date = document.getElementById('" + property + "Id');");
NSTagUtil.jsStrAdd(sb, " var year = document.getElementById('year_" + property + "');");
NSTagUtil.jsStrAdd(sb, " var YYYYvalue = year.options[year.selectedIndex].value;");
NSTagUtil.jsStrAdd(sb, " if (val == '') {");
NSTagUtil.jsStrAdd(sb, " val =" + (isStart ? "'01'" : "'12'") + ";");
NSTagUtil.jsStrAdd(sb, " }");
NSTagUtil.jsStrAdd(sb, " date.value = date.value.substring(0,4) + val + date.value.substring(6,8);");
NSTagUtil.jsStrAdd(sb, " var n = MonHead[val - 1];");
NSTagUtil.jsStrAdd(sb, " if (val == 2 && isLeapYear(YYYYvalue)) n++;");
NSTagUtil.jsStrAdd(sb, " " + property + "_writeDay(n)");
NSTagUtil.jsStrAdd(sb, "}");
NSTagUtil.jsStrAdd(sb, "function " + property + "_dayOnChange(obj) {");
NSTagUtil.jsStrAdd(sb, " var val = obj.value;");
NSTagUtil.jsStrAdd(sb, " if (val == '') {");
if (isStart) {
NSTagUtil.jsStrAdd(sb, " val = '01';");
} else {
NSTagUtil.jsStrAdd(sb, " val = obj.options.length - 1;");
}
NSTagUtil.jsStrAdd(sb, " }");
NSTagUtil.jsStrAdd(sb, " var date = document.getElementById('" + property + "Id');");
NSTagUtil.jsStrAdd(sb, " date.value = date.value.substring(0,6) + val;");
NSTagUtil.jsStrAdd(sb, "}");
NSTagUtil.jsStrAdd(sb, "function " + property + "_writeDay(n) {");
NSTagUtil.jsStrAdd(sb, " var day = document.getElementById('day_" + property + "');");
NSTagUtil.jsStrAdd(sb, " if(day.options.length == n+1) return;");
NSTagUtil.jsStrAdd(sb, " var index = day.selectedIndex;");
NSTagUtil.jsStrAdd(sb, " day.options.length = 29;");
NSTagUtil.jsStrAdd(sb, " for (var i = 29; i < n+1; i++) {");
NSTagUtil.jsStrAdd(sb, " day.options.add(new Option(i,i));");
NSTagUtil.jsStrAdd(sb, " }");
NSTagUtil.jsStrAdd(sb, " day.selectedIndex = (index > day.options.length-1 ? day.options.length-1 : index);");
if (!isStart) {
NSTagUtil.jsStrAdd(sb, " if(day.selectedIndex == 0) {");
NSTagUtil.jsStrAdd(sb, " var date = document.getElementById('" + property + "Id');");
NSTagUtil.jsStrAdd(sb, " date.value = date.value.substring(0,6) + (day.options.length-1).toString();");
NSTagUtil.jsStrAdd(sb, " }");
}
NSTagUtil.jsStrAdd(sb, "}");
NSTagUtil.jsStrAdd(sb, "function isLeapYear(year) {");
NSTagUtil.jsStrAdd(sb, " return (0 == year % 4 && (year % 100 != 0 || year % 400 == 0))");
NSTagUtil.jsStrAdd(sb, "}");
NSTagUtil.jsStrAdd(sb, "</script>");

return sb.toString();
}

public String getName() {
return name;
}

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

public String getProperty() {
return property;
}

public void setProperty(String property) {
this.property = property;
}

public Boolean getIsStart() {
return isStart;
}

public void setIsStart(Boolean isStart) {
this.isStart = isStart;
}

public int getTabindex() {
return tabindex;
}

public void setTabindex(int tabindex) {
this.tabindex = tabindex;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值