分享
 
 
 

用JSP制作的日期选择器

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

我们在做web应用的时候,在很多情况下都需要操作人员在页面上输入日期之类的日期型字段信息。通常的做法是:

1、用SELECT标签分别选择年月日

2、给一个INPUT,并定义一个固定的格式,让操作人员自己填写

3、使用MICROSOFT提供的ACTIVEX DATETIMECONTROLLER。

然而这中方法均有缺陷,在1中虽然不会出现一些离谱的数据(如99月88日),但有效性验证和后台数据处理将消耗我们不少的时间和精力。而且一个操作页面如果有较多个日期型字段,一定会给使用者带来困扰。在2中用户可以任意录入年月日,一定会出现离谱的数据也存在有效性验证和后台处理等问题。MICROSOFT的ACTIVEX DATETIMECONTROLLER是个好东西,不过它的CLSID“又长又臭”很难记住 ,还有很多参数需要设置。如果对MICROSOFT的东西不了解,使用起来也方便不到哪儿去。再说不一定每个人的机器上都安装了这个ACTIVEX控件。但是我在做这个日期选择器的时候它给了我不小的启发。下面是我在测试这个日期选择器的一些画面。

1.日期选择前

2.日期选择中

3.日期选择后

结合给出的页面我简单的介绍一下使用方法,做一个需要输入日期数据的页面(见图:日期选择前)在点击确定按钮(如果将确定按钮换成一个小图标效果会更好,愿意动手的可以试一试)的时候会弹出jsp日期选择器。我们可以用画面(见图:日期选择中)中提供的按钮来前后翻,也可以从下拉框中直接选择。月份选择有循环滚动功能给,即1月的前一个月是12月,12月的后一个月是1月,但不提供逢1月(前一月)和12月(后一月)时的年份的变化。如果有需要可以自己在源代码上修改,估计也就是4行的工作两。年份我设置在1970-2470之间。如果有需要,请自己动手修改吧。JSP日期选择器的另一个特点时与星期的对齐是与日常使用的日历对应的。选择后的结果如图“日期选择后” 。不足之处是脱离了WEB SERVER不能使用。

下面给出源代码:

1、testCalendar.jsp的源代码

<%@ page contentType="text/html; charset=GBK" %>

<html>

<head>

<title>

testCalendar

</title>

<script language="JavaScript">

var calDateFiled="";

var inDate="";

function setDateField(dateField)

{

calDateField = dateField;

inDate = dateField.value;

}

function myGetDate(selectedDate)

{

calDateField.value = selectedDate;

calDateField.focus();

}

</script>

</head>

<body>

<form name="abc">

日期:<input type="text" name="indate" readOnly>

<input type="button" name="ok" value="确定" onClick="setDateField(document.abc.indate);tempstr=window.open('IECalendar.jsp','tony','dependent=yes,titlebar=no,width=465,height=275,location=no');tempstr.moveTo((screen.height-275)/2,(screen.width-475)/2);">

</form>

</body>

</html>

2、IECalendar.jsp的源代码

<%@ page contentType="text/html; charset=GB2312" %>

<%@ page import="java.util.Calendar" %>

<%@ page import="java.util.GregorianCalendar" %>

<%@ page import="java.util.Date" %>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<link rel="stylesheet" href="images/style.css" type="text/css">

<title>

IECalendar

</title>

<script language="JavaScript" >

var daystr="1";

function selectdate()

{

document.all.calendar.submit();

}

function premonth()

{

if(parseInt(document.all.month.value)==1)

{

window.location="IECalendar.jsp?year="+document.all.year.value+"&month=12";

}

else

{

window.location="IECalendar.jsp?year="+document.all.year.value+"&month="+(parseInt(document.all.month.value)-1)%12;

}

}

function nextmonth()

{

if(parseInt(document.all.month.value)==11)

{

window.location="IECalendar.jsp?year="+document.all.year.value+"&month=12";

}

else

{

window.location="IECalendar.jsp?year="+document.all.year.value+"&month="+(parseInt(document.all.month.value)+1)%12;

}

}

function preyear()

{

if(parseInt(document.all.year.value)==1970)

{

return;

}

else

{

window.location="IECalendar.jsp?year="+(parseInt(document.all.year.value)-1)+"&month="+parseInt(document.all.month.value);

}

}

function nextyear()

{

if(parseInt(document.all.year.value)==2470)

{

return;

}

else

{

window.location="IECalendar.jsp?year="+(parseInt(document.all.year.value)+1)+"&month="+parseInt(document.all.month.value);

}

}

function getday()

{

return daystr;

}

</script>

</head>

<%

int year=0;

int month=0;

int day=1;

Date now=new Date();

Calendar calendar=new GregorianCalendar();

calendar.setTime(now);

if((request.getParameter("year")!=null))

{

if((!request.getParameter("year").equals(""))||(!request.getParameter("year").trim().equals("")))

{

year=Integer.parseInt(request.getParameter("year"));

}

else

{

year=calendar.get(calendar.YEAR);

}

}

else

{

year=calendar.get(calendar.YEAR);

}

if((request.getParameter("month")!=null))

{

if((!request.getParameter("month").equals(""))||(!request.getParameter("month").trim().equals("")))

{

month=Integer.parseInt(request.getParameter("month"));

}

else

{

month=Integer.parseInt(request.getParameter("month"));

}

}

else

{

month=calendar.get(calendar.MONTH)+1;

}

// if((request.getParameter("day")!=null))

// {

// if((!request.getParameter("day").equals(""))||(!request.getParameter("day").trim().equals("")))

// {

// day=Integer.parseInt(request.getParameter("day"));

// }

// else

// {

// day=Integer.parseInt(request.getParameter("day"));

// }

// }

// else

// {

// day=calendar.get(calendar.DAY_OF_MONTH);

// }

%>

<body topmargin="5">

<center>

<form action="" name="calendar">

<table border="1" width="450" cellspacing="0" cellpadding="1" bordercolordark="#FFFFFF" bordercolorlight="#000000" style="font-size: 12px; border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom-width: 0px">

<tr bgcolor="#9370DB">

<td width="100"><font color="#F0F8FF" size="3">&nbsp;<b>月 份</b>&nbsp;</font></td>

<td>

<select name="month" style="width:125" onchange="document.all.calendar.submit();">

<%

for(int i=1;i<=12;i++)

{

%>

<option value="<%=i%>" <%if(i==month){out.print(" selected");}%>><%=i%>月</option>

<%

}

%>

</select>

</td>

<td width="100"><font color="#F0F8FF" size="3">&nbsp;<b>年 份</b>&nbsp;</font></td>

<td>

<select name="year" style="width:125" onchange="document.all.calendar.submit();">

<%

for(int i=0;i<=500;i++)

{

%>

<option value="<%=i+1970%>" <%if(i==year-1970){out.print(" selected");}%>><%=i+1970%>年</option>

<%

}

%>

</select>

</td>

</tr>

</table>

<table border="0" width="450" cellspacing="0" cellpadding="1" bordercolordark="#FFFFFF" bordercolorlight="#000000" style="font-size: 12px; border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom-width: 0px">

<tr>

<td>

<br><img src="images/preyear.gif" style="cursor:hand"

onclick="if(parseInt(document.all.year.value)==1970)

{

return;

}

else

{

window.location='IECalendar.jsp?year='+(parseInt(document.all.year.value)-1)+'&month='+parseInt(document.all.month.value);

}">&nbsp;

<img src="images/premonth.gif" style="cursor:hand"

onclick="if(parseInt(document.all.month.value)==1)

{

window.location='IECalendar.jsp?year='+document.all.year.value+'&month=12';

}

else

{

window.location='IECalendar.jsp?year='+document.all.year.value+'&month='+(parseInt(document.all.month.value)-1)%12;

}">&nbsp;

<img src="images/today.gif" style="cursor:hand" onclick="window.location='IECalendar.jsp';">&nbsp;

<img src="images/nextmonth.gif" style="cursor:hand"

onclick="if(parseInt(document.all.month.value)==11)

{

window.location='IECalendar.jsp?year='+document.all.year.value+'&month=12';

}

else

{

window.location='IECalendar.jsp?year='+document.all.year.value+'&month='+(parseInt(document.all.month.value)+1)%12;

}">&nbsp;

<img src="images/nextyear.gif" style="cursor:hand"

onclick="if(parseInt(document.all.year.value)==2470)

{

return;

}

else

{

window.location='IECalendar.jsp?year='+(parseInt(document.all.year.value)+1)+'&month='+parseInt(document.all.month.value);

}"></td>

</tr>

</table>

<br>

<table border="1" width="450" cellpadding="1" cellspacing="0" bordercolordark="#FFFFFF" cellspacing="0" cellpadding="0" bordercolorlight="#000000" style="font-size: 12px; border-left-width: 1px; border-right-width: 1px; border-top-width: 2px; border-bottom-width: 0px">

<tr bgcolor="#B0C4DE">

<td><font color="gold"><b>&nbsp;星期日&nbsp;</b></font></td>

<td><b>&nbsp;星期一&nbsp;</b></td>

<td><b>&nbsp;星期二&nbsp;</b></td>

<td><b>&nbsp;星期三&nbsp;</b></td>

<td><b>&nbsp;星期四&nbsp;</b></td>

<td><b>&nbsp;星期五&nbsp;</b></td>

<td><font color="gold"><b>&nbsp;星期六&nbsp;</b></font></td>

</tr>

<%

int days[]=new int[50];

for(int i=0;i<50;i++)

{

days[i]=0;

}

Calendar myCalendar=new GregorianCalendar();

myCalendar.set(year,month-1,day);

for(int i=1;i<=myCalendar.getActualMaximum(myCalendar.DAY_OF_MONTH);i++)

{

days[myCalendar.get(myCalendar.DAY_OF_WEEK)+i-1]=i;

}

for(int i=0;i<6;i++)

{

%>

<tr bgcolor="#00FA9A">

<%

for(int j=1;j<=7;j++)

{

if(days[i*7+j]==0)

{

%>

<td>&nbsp;</td>

<%

}

else

{

%>

<td><a href="javascript:parent.opener.myGetDate(document.all.year.value+'-'+document.all.month.value+'-'+<%=days[i*7+j]%>);window.close();" style="text-decoration:none">

<font size="3" <%if(days[i*7+j]==calendar.get(calendar.DATE)){out.println("color=\"red\" ");}else{out.println("color=\"blue\" ");}%>>

<b onMouseOver="this.style.color='BLACK';" onMouseOut="<%if(days[i*7+j]==calendar.get(calendar.DATE)){out.print("this.style.color='red'");}else{out.print("this.style.color='blue'");}%>"><%=days[i*7+j]%></b></font></a></td>

<%

}

}

%>

</tr>

<%

}

%>

</table>

</form>

</center>

</body>

</html>

注意事项:请不要单独使用IECalendar.jsp,应为会出错,必须与另外一个包含了

<script language="JavaScript">

var calDateFiled="";

var inDate="";

function setDateField(dateField)

{

calDateField = dateField;

inDate = dateField.value;

}

function myGetDate(selectedDate)

{

calDateField.value = selectedDate;

calDateField.focus();

}

</script>

并由

onClick="setDateField(document.abc.indate);tempstr=window.open('IECalendar.jsp','tony','dependent=yes,titlebar=no,width=465,height=275,location=no');tempstr.moveTo((screen.height-275)/2,(screen.width-475)/2);"

打开的窗口中才能正常工作。

有什么疑问和不足之处请发EMAIL通知我。

NAME:东尼

EMAIL:tonyzhangcn@sohu.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有