使用Java Struts填充fullcalendar事件数据

时间:2017-06-28 22:16:21

标签: jquery json ajax fullcalendar struts-1

我一直关注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,没有任何显示。

1 个答案:

答案 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)

这会正确显示日历中的信息。