`
垂直的微笑
  • 浏览: 45456 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Struts自定义日期控件

    博客分类:
  • JAVA
阅读更多
/**
* <pre>
* &lt;strong&gt;説明&lt;/strong&gt;
* 年月日表示.&lt;BR&gt;
* </pre>
*
* <pre>
* &lt;strong&gt;注意事項:&lt;/strong&gt;
* </pre>
*
* <pre>
* &lt;strong&gt;使用例:&lt;/strong&gt;
*  &lt;tes:dateSelect /&gt;
* </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,);
            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,);
            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 + "' onchange='" + 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'") + " onchange='" + 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'") + " onchange='" + 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;
    }
}
分享到:
评论

相关推荐

    delphi7编程百例

    ToolBar工具栏控件的使用 动态建立主菜单选项 窗口界面的...自定义系统的About项 修改系统级菜单 实现透明窗体效果 爆破特技窗体 只允许建立一次子窗体的MDI程序 从外部DLL中调用子...

    JAVA上百实例源码以及开源项目

    Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP  Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件...

    JAVA上百实例源码以及开源项目源代码

    Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP  Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件...

    JspRun!社区论坛系统 v6.0.0 build 20110516 GBK 安装版.zip

    24、修复了:前台自定义信息分类--日期控件IE下显示错误,谷歌浏览器下乱码现象 25、修改了:如果后台设置的“论坛名称”过长,在分栏模式下将出现文字重叠的现象。 26、修改了:使用 Archiver 功能浏览没有阅读...

    JspRun!社区论坛系统 v6.0.0 build 20110516 UTF-8 源码版.zip

    24、修复了:前台自定义信息分类--日期控件IE下显示错误,谷歌浏览器下乱码现象 25、修改了:如果后台设置的“论坛名称”过长,在分栏模式下将出现文字重叠的现象。 26、修改了:使用 Archiver 功能浏览没有阅读...

    JspRun!社区论坛系统 v6.0.0 build 20110516 GBK 源码版.zip

    24、修复了:前台自定义信息分类--日期控件IE下显示错误,谷歌浏览器下乱码现象 25、修改了:如果后台设置的“论坛名称”过长,在分栏模式下将出现文字重叠的现象。 26、修改了:使用 Archiver 功能浏览没有阅读...

    JspRun!社区论坛系统 v6.0.0 build 20110516 UTF-8 安装版.zip

    24、修复了:前台自定义信息分类--日期控件IE下显示错误,谷歌浏览器下乱码现象 25、修改了:如果后台设置的“论坛名称”过长,在分栏模式下将出现文字重叠的现象。 26、修改了:使用 Archiver 功能浏览没有阅读...

    java开源包1

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包11

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包2

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包3

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包6

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包5

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包10

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包4

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包8

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包7

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

Global site tag (gtag.js) - Google Analytics