用JSP制作的日期选择器 (转)

本文介绍了一个使用JSP实现的日期选择器,通过弹出窗口提供用户友好的日期选择,避免了手动输入可能带来的错误。该选择器支持前后翻页,与日常日历对齐,适用于需要输入日期的Web应用。代码包括`testCalendar.jsp`和`IECalendar.jsp`,并提供了使用示例和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用JSP制作的日期选择器 (转)[@more@]

我们在做web应用的时候,在很多情况下都需要操作人员在页面上输入日期之类的日期型字段信息。通常的做法是:XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

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

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

3、使用MICROSOFT提供的ActiveX DATETIMECONTROLLER。

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

1.日期选择前

JSP日期选择器选择前.GIF" align=baseline border=0>

 

2.日期选择中

 

3.日期选择后

 

 

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

下面给出源代码:

1、testCalendar.jsp的源代码

 

testCalendar

  var calDateFiled="";

  var inDate="";

  function setDateField(dateField)

  {

  calDateField = dateField;

  inDate = dateField.value;

  }

 

  function myGetDate(selectedDate)

  {

  calDateField.value = selectedDate;

  calDateField.focus();

}

RM name="abc">

日期:

 

2、IECalendar.jsp的源代码

 

IECalendar

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;

}

  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);

//  }

 

%>

db">

 

 月  份 

 

 

 

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

  {

  %>

  >月

 

  }

  %>

 

 

 

 年  份 

 

 

 

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

  {

  %>

  >年

 

  }

  %>

 

 


preyear.gif

  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);

  }"> 

premonth.gif

  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;

  }"> 

today.gif 

nextmonth.gif

  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;

  }"> 

nextyear.gif

  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);

  }">


 

 

 星期日 

 

 星期一 

 

 星期二 

 

 星期三 

 

 星期四 

 

 星期五 

 

 星期六 

 

 

  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++)

  {

 %>

 

 

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

  {

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

  {

 %>

 

 

 

  }

  else

  {

 %>

 

>

">

 

  }

  }

%>

 

  }

 %>

 

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

  var calDateFiled="";

  var inDate="";

  function setDateField(dateField)

  {

  calDateField = dateField;

  inDate = dateField.value;

  }

 

  function myGetDate(selectedDate)

  {

  calDateField.value = selectedDate;

  calDateField.focus();

}

并由

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

 

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-993281/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-993281/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值