我们在做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的源代码
<%@ page contentType="text/html; charset=GBK" %>
testCalendar
var calDateFiled="";
var inDate="";
function setDateField(dateField)
{
calDateField = dateField;
inDate = dateField.value;
}
function myGetDate(selectedDate)
{
calDateField.value = selectedDate;
calDateField.focus();
}
2、IECalendar.jsp的源代码
<%@ page contentType="text/html; charset=GB2312" %>
<%@ page import="java.util.Calendar" %>
<%@ page import="java.util.GregorianCalendar" %>
<%@ page import="java.util.Date" %>
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);
// }
%>
注意事项:请不要单独使用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
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。