用JSP做了一个日历,有三个文件文件一:schedule.jsp
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>查看个人工作计划</title>
<METAHTTP-EQUIV="Cache-Control"CONTENT="no-cache,must-revalidate">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="css/schedule.css" />
<meta name="description" content="CBS3K预约页面" />
<script type="text/javascript" src="AjaxObj.js"></script>
<script type="text/javascript">
var gxmlhttp;
var gyear;
var gmonth;
var gdate;
var gyeardisp;
var gmonthdisp;

function init()
{
gxmlhttp = GetXmlHttpObject();
if(gxmlhttp == null)
{
alert("ajax not be suppert!");
window.location.href = "http://www.google.com";
return;
}
var date = new Date();
gyear = date.getYear();
gmonth = date.getMonth();
    gdate = date.getDate();
gmonth = gmonth+1;
DispCalendar(gyear,gmonth,gdate);
}

function DispCalendar(vYear, vMonth, vDate)
{
var caleNow = vYear + "年" + vMonth + "月";
document.getElementById("CaleTitle").innerText = caleNow;
var url = "src/CalenderServer.jsp?year=" + vYear;
url += "&month=" + vMonth;
if (vYear == gyear && vMonth == gmonth) {
url += "&date=" + vDate;
}
url += "&ts=" + Math.random();
gxmlhttp.onreadystatechange = CalendarServerChanged;
gxmlhttp.open("GET", url, false);
gxmlhttp.send(null);
}

function CalendarServerChanged()
{
if (gxmlhttp.readyState == 4) {
if (gxmlhttp.status == 200) {
var xmlDoc = gxmlhttp.responseXML.documentElement;
var datelength = xmlDoc.getElementsByTagName("date").length;
for (var i = 0; i < 42; i ++) {
var dateid = "date" + i;
var datevalue = xmlDoc.getElementsByTagName("date")[i].childNodes[0].nodeValue;
var thecell = document.getElementById(dateid);
var iscurmonth = xmlDoc.getElementsByTagName("date")[i].attributes.getNamedItem("curmonth").nodeValue;
var iscurdate = xmlDoc.getElementsByTagName("date")[i].attributes.getNamedItem("curdate");

thecell.innerText = datevalue;
if (iscurmonth == "false") {
thecell.style.color = "#C0C0C0";
}else {
thecell.style.color = "black";
}
if (iscurdate != null && iscurdate.nodeValue == "true") {
thecell.style.backgroundColor = "yellow";
}else {
thecell.style.backgroundColor = "white";
}
}
}
}
}

function GoBackMonth()
{
if (gmonth > 1) {
gmonth = gmonth-1;
DispCalendar(gyear, gmonth, gdate);
}else {
gyear = gyear-1;
gmonth=12;
DispCalendar(gyear, gmonth, gdate);
}
}

function GoNextMonth()
{
if (gmonth < 12) {
gmonth = gmonth+1;
DispCalendar(gyear, gmonth, gdate);
}else {
gmonth=1;
gyear=gyear+1;
DispCalendar(gyear, gmonth, gdate);
}
}
 
</script>
</head>
<body onLoad="init()"> <table border="1">
<tr>
<th><a href="javascript:GoBackMonth();">&lt;</a></th>
<th colspan="5" id="CaleTitle"><%=0+"年"+0+"月"%></th>
<th><a href="javascript:GoNextMonth();">&gt;</a></th>
</tr>
<tr>
<td>日</td>
<td>一</td>
<td>二</td>
<td>三</td>
<td>四</td>
<td>五</td>
<td>六</td>
</tr>
<%
for (int i = 0; i < 6; i ++) {
%>
<tr>
<%
for (int j = 0; j < 7; j ++) {
%>
<td style="color: black; text-align: right; " id="date<%=(i*7+j)%>">0</td>
<%
}
%>
</tr>
<%
}
%> </table>
</body>
</html>
文件二:CalenderServer.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page info="CBS3KWP AJAX SERVER FOR CALENDER" %>
<%@ page import="java.util.*" %><% String strReqYear = request.getParameter("year");
String strReqMonth = request.getParameter("month");
String strReqDate = request.getParameter("date"); Calendar cCale = Calendar.getInstance();
cCale.setLenient(true);

int nReqYear = Integer.parseInt(strReqYear);
int nReqMonth = Integer.parseInt(strReqMonth);
int nReqDate = 0;
if (strReqDate != null) {
nReqDate = Integer.parseInt(strReqDate);
}

cCale.set(nReqYear, nReqMonth-1, 1);
int nStartWeekday = cCale.get(Calendar.DAY_OF_WEEK);

if (nStartWeekday == 1) {
cCale.add(Calendar.DATE, -7);
}else {
cCale.add(Calendar.DATE, -(nStartWeekday-1));
} // build output contents
String strXmlContent = "";
for (int i = 0; i < 42; i ++) {
String strNode = "<date ";
int nTmpMonth = cCale.get(Calendar.MONTH)+1;
int nTmpDate = cCale.get(Calendar.DATE);
if (nTmpMonth == nReqMonth) {
strNode += "curmonth='true'";
}else {
strNode += "curmonth='false'";
}
if (nTmpDate == nReqDate) {
strNode += " curdate='true'";
}
strNode += ">" + nTmpDate + "</date>";
strXmlContent += strNode;

// next day
cCale.add(Calendar.DATE, 1);
}

// output
String retxml = "<?xml version='1.0' encoding='GB2312'?>";
retxml += "<return>";
retxml += strXmlContent;
retxml += "</return>"; response.setContentType("text/xml");
response.getWriter().write(retxml);

%>文件三:AjaxObj.js
/*
 * return xmlHttp object for ajax usage.
 */function GetXmlHttpObject()
{
var xmlHttp=null;
try {
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}catch (e) {
// Internet Explorer
try {
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}catch (e) {
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}现在的问题是,页面第一次载入时可以根据当前月份填注日历数据,但是当点击下一月或上一月时无法更新日历数据。第一次用ajax就碰上这种问题,我不知所措,只能求助于各位高手了。