我一直关注this博文。
但是我的日历没有显示。我想从数据库中检索数据,然后使用JSON(当前我已经硬编码的测试数据)输出数据,然后使用$ .post()检索该JSON数据并用它填充日历。
我的代码 -
动作映射定义
<action path="/getCalendarEvents"
scope="request"
type="com.action.struts.AjaxAction"
validate="false"/>
eventCalendar.jsp
<script type="text/javascript">
$(document).ready(function() {
$.post('getCalendarEvents.html?method=allEvents', {action: ''},
function(data) {
var date = new Date();
var d = date.getDate();
var m = date.getMonth();
var y = date.getFullYear();
$('#calendar').fullCalendar({
theme: true,
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
editable: true,
events: data
});
}, "json"
);
});
</script>
AjaxAction.java
public class AjaxAction extends ActionForward{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
AjaxMoreUtil.getAllEvents(request, response);
return null;
}
}
AjaxMoreUtil.java
public class AjaxMoreUtil {
public static void getAllEvents(HttpServletRequest request, HttpServletResponse response) throws Exception {
ArrayList<CalendarDTO> allEventList = new ArrayList<CalendarDTO>();
CalendarDTO c = new CalendarDTO();
c.setId(1);
c.setStart("2017-06-21");
c.setEnd("2017-06-26");
c.setTitle("Task in Progress");
allEventList.add(c);
CalendarDTO d = new CalendarDTO();
d.setId(2);
d.setStart("2017-06-01");
d.setEnd("2017-06-10");
d.setTitle("Task in Progress");
allEventList.add(d);
String json = new Gson().toJson(allEventList);
System.out.println("json value " + json);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
}
}
当我运行应用程序时,我得到一个404的POST,没有任何显示。
答案 0 :(得分:0)
我最终使用请求变量解决了这个问题。
在AjaxMoreUtil.java中,我将每个事件放入一个ArrayList。
List l = new ArrayList();
CalendarDTO c = new CalendarDTO();
c.setStart("2017-07-05");
c.setEnd("2017-07-08");
c.setTitle("event1");
l.add(c);
然后我使用谷歌的Gson JSON转换器将该列表转换为JSON字符串。
String resultSet = gson.toJson(l);
request.setAttribute("rs", resultSet);
request.getRequestDispatcher("/pages/Scheduler.jsp").forward(request,response);
在.jsp中我获取请求变量并将其设置为javascript var。
var rs = JSON.stringify(<%=rs%>);
并将其作为JSON字符串解析到日历中
events: JSON.parse(rs)
这会正确显示日历中的信息。