本人在进行一个实验室项目中,用到了fullCalendar这个插件。用事件源eventSources为其添加事件(本人想用它来做会议管理的功能)。由于在jq里操作,不可避免地用到json。
对象集合转json
// An highlighted block
List<Calendar> allCalendar = cs.getAll();//得到了对象集合
JsonConfig config = new JsonConfig();//这句其实可以省略
//设置编码格式
ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8");
// 把对象集合转换成json格式
//这里是json字符串形式发送,意味着到了前台得把json字符串转成json数据,这样才能通过键值对的形式访问其值
String json = JSONArray.fromObject(allCalendar).toString();
System.out.println(json);
ServletActionContext.getResponse().getWriter().write(json);
转换完成,到前台接受,添加到fullCalendar事件中。
//在其函数体内添加事件源,还有别的属性这里不做展示
$('#calendar').fullCalendar({
eventSources: [
// your event source
{
events:function(start, end, callback) {
$.ajax({
url:"/Main/CalendarAction_list",
success:function(doc) {
var j = eval("(" + doc + ")");//转成json对象
var events = [];
for (var i = 0; i < j.length; i++) {
var ev = j[i];
var title = ev.name+":"+"\n"+ ev.room;
var evtstart = ev.startTime;
var evtend = ev.endTime;
var evid = ev.id;
var evurl= 'CalendarAction_info?id='+evid ;
events.push({
//以下名称是events事件内部的标准名称格式
title:title,
start:evtstart,
end:evtend,
id:evid,
url:evurl
});
// alert(evid);
}
callback(events);
},
error:function() {
alert('error');
}
})
},
color: 'liteblue', // an option!
textColor: 'white' // an option!
}
],
});
写道这里,本以为大功告成,可是测试发现json对象取到了,打印测试没问题,可是就是添加不进事件。原因出在了这:
events:function(start, end, callback) 是官方文档函数没错的,可是他居然少参数,可能更新之后有改动,可是文档是没变,正确的应该是 events:function(start, end, timezone, callback