2017-06-28 6 views
0

私はthisブログの投稿に従っています。Java Strutsを使用してfullcalendarイベントデータを取り込む

ただし、私のカレンダーは表示されません。私はデータベースからデータを取得し、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); 
    } 
} 

私はPOSTと何もディスプレイ用の404を取得するアプリケーションを実行すると。

+0

私はストラットに関して何も知らないので、なぜあなたがあなたの要求に対して404を得ているのか言うことはできません。しかし、カレンダー設定の面では、間違った方向に進むでしょう。カレンダーをページのロード時に宣言し、次に「イベント」プロパティーはPOSTメソッドを実行する関数でなければなりません。あなたのサーバーは日付でイベントをフィルタリングするために使用する "開始"と "終了"パラメータを受け入れる必要があります。こうすると、カレンダーのビュー/日付が変更されると、カレンダーは自動的に関連する日付のイベントを取得します。それが現れたら、あなたは一度にそれらをすべて取っていきます。それは不十分です... – ADyson

+0

...時間が経つにつれてはるかに非効率的になり、おそらく人々は通常は実際には見られません。詳細はhttps://fullcalendar.io/docs/event_data/events_function/およびhttps://fullcalendar.io/docs/event_data/events_json_feed/を参照してください。 – ADyson

答えて

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); 

次にGoogleの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%>); 

そして

events: JSON.parse(rs) 

JSON文字列としてカレンダーにそれを解析するこれが正しくカレンダーに情報を表示します。

関連する問題