2014-03-24 4 views
2

DHXScheduler를 시험 시간 설정을 위해 JSP 응용 프로그램에서 사용하고 있습니다. 필자는 시험에 대한 정보가 포함 된 필자 고유의 라이트 박스를 추가했습니다.DHXScheduler 맞춤 라이트 박스 필드 저장/가져 오기

내 이벤트를 저장, 생성 및 가져 오는 내 EventsManager 클래스입니다. DHXEventsManager 클래스를 확장합니다.

public class EventsManager extends DHXEventsManager { 

public EventsManager(HttpServletRequest request) {   
    super(request); 
} 

public Iterable getEvents() { 

    Connection conn = null; 
    DHXEventsManager.date_format = "yyyy-MM-dd HH:mm:ss"; 
    List<Event> events = new ArrayList<Event>(); 

    try { 

     conn = SQLHelper.getConnection(); 
     Statement statement = conn.createStatement(); 

     StringBuffer query = new StringBuffer(); 
     query.append("SELECT * FROM "); 
     query.append(TimetableEvent.TBL_EVENTS); 
     query.append(" e JOIN "); 
     query.append(StudyUnit.TBL_STUDYUNITS); 
     query.append(" s ON e."); 
     query.append(TimetableEvent.FLD_UNITCODE); 
     query.append(" = s."); 
     query.append(StudyUnit.FLD_UNITCODE); 

     ResultSet rs = statement.executeQuery(query.toString()); 

     while (rs.next()) { 

      Event e = new Event(); // extends DHXEvent and contains additional fields 

      e.setId(Integer.parseInt(rs.getString(TimetableEvent.FLD_ID))); 
      e.setText(rs.getString(TimetableEvent.FLD_UNITCODE)); 
      e.setStart_date(rs.getString(TimetableEvent.FLD_STARTDATE)); 
      e.setEnd_date(rs.getString(TimetableEvent.FLD_ENDDATE)); 
      e.setUnitCode(rs.getString(StudyUnit.FLD_UNITCODE)); 
      e.setTitle(rs.getString(StudyUnit.FLD_TITLE)); 
      e.setYear(rs.getString(StudyUnit.FLD_YEAR)); 
      e.setSemester(rs.getShort(StudyUnit.FLD_SEMESTER)); 
      e.setExamLength(rs.getFloat(StudyUnit.FLD_EXAMLENGTH)); 
      e.setNoOfStudents(rs.getShort(StudyUnit.FLD_NOOFSTUDENTS)); 
      e.setDepartment(rs.getString(StudyUnit.FLD_DEPARTMENT)); 
      e.setCredits(rs.getShort(StudyUnit.FLD_CREDITS)); 
      e.setEvening(rs.getBoolean(StudyUnit.FLD_EVENING)); 

      events.add(e); 
      } 

     } catch (SQLException e) { 
      System.out.println("[EventsManager.getEvents()]: " + e.getMessage()); 

     } finally { 
      SQLHelper.closeConnection(conn); 
     } 

     DHXEventsManager.date_format = "MM/dd/yyyy HH:mm"; 
     return events; 
    } 

    @Override 
    public DHXStatus saveEvent(DHXEv event, DHXStatus status) { 
    Connection conn = SQLHelper.getConnection(); 
    PreparedStatement pstmt = null; 
    ResultSet rs = null; 

    Event ev = (Event) event; 

    try { 

     if (status == DHXStatus.UPDATE) { 
      pstmt = TimetableEvent.updateEvent(conn, ev); 

     } else if (status == DHXStatus.INSERT) { 
      System.out.println("SAVE"); 
      pstmt = TimetableEvent.insertEvent(conn, ev); 

     } else if (status == DHXStatus.DELETE) { 
      pstmt = TimetableEvent.deleteEvent(conn, event); 
     } 

     if (pstmt != null) { 
      pstmt.executeUpdate(); 
      rs = pstmt.getGeneratedKeys(); 

      if (rs.next()) { 
       event.setId(rs.getInt(1)); 
       ev.setId(rs.getInt(1)); 
      } 
     } 

    } catch (SQLException e) { 
     System.out.println("[EventsManager.saveEvent() - " + status.name() + "]: " + e.getMessage()); 
     e.printStackTrace(); 

    } finally { 

     if (rs != null) SQLHelper.closeResultSet(rs); 
     if (pstmt != null) SQLHelper.closePreparedStatement(pstmt); 
     if (conn != null) SQLHelper.closeConnection(conn); 
    } 

    return status; 
} 

    @Override 
public DHXEv createEvent(String id, DHXStatus status) { 
    return new Event(); 
} 
} 

Event 클래스는 DHXEvent를 확장하고 추가 필드에 대한 getter 및 setter가 포함되어 있습니다. 문제는 내가 DHXEv에서 Event으로 캐스팅 할 때 null로 추가 필드가 손실되지만 saveEvent 메서드는 DHXEv 만 매개 변수로 받아 들일 수 있다는 것입니다.

이것은 이벤트가있는 JSON 객체를 가져 오기 위해 EventsManager의 getEvents() 메소드가 호출되는 events.jsp 파일입니다.

<%@ page contentType="application/json" 
     import="com.dhtmlx.planner.*,servlets.*,events.EventsManager" 
%> 

<%= getEvents(request) %> 
<%! 
    String getEvents(HttpServletRequest request) throws Exception { 
     EventsManager evs = new EventsManager(request); 
     return evs.run(); 
    } 
%> 

이것은 돌아 오는 것의 샘플입니다. 볼 수 있듯이 DHXEv 개체 (예 : id, start_date, end_date and text)의 필드 만 반환합니다.

{id:7, text:CIS3087, end_date:03/27/2014 13:00, start_date:03/27/2014 10:00} 

추가 입력란을 JSON 개체에 추가하려면 어떻게해야합니까? 예 : 스터디 제목,학과 등이있는 개체가 있습니까?

scheduler.config.api_date = "%Y-%m-%d %H:%i"; 
scheduler.config.details_on_dblclick = true; 
scheduler.config.details_on_create = true; 
scheduler.config.first_hour = "8"; 
scheduler.config.last_hour = "22"; 
scheduler.config.drag_lightbox = true; 
scheduler.config.show_loading = true; 
scheduler.config.mark_now = true; 

scheduler.init('scheduler_here', new Date(), "week"); 
scheduler.load("events.jsp", "json"); 

var dp = new dataProcessor("events.jsp"); 
dp.init(scheduler); 

function save_form() { 
     var ev = scheduler.getEvent(scheduler.getState().lightbox_id); 

     ev.text = html("studyunit_code").value; 
     ev.start_date = setDate("start_date", "starttime"); 
     ev.end_date = setDate("start_date", "endtime"); 

     scheduler.endLightbox(true, html("custom_form")); 

     $("#form1").submit(); // submits all the other fields and saves them to a db table 
} 

scheduler.showLightbox = function(id) { 

    var ev = scheduler.getEvent(id); 
    scheduler.startLightbox(id, html("custom_form")); 

    html("studyunit_code").value = ev.text; 
    html("studyunit_code").focus(); 
    html("studyunit_title").value = ev.studyunit_title; 

    var startDate = ev.start_date; 
    getDate(startDate, "start_date", "starttime"); 

    var endDate = ev.end_date; 
    getDate(endDate, "start_date", "endtime");    
}; 

나는 그것의 단지 작은 수정을 추측하고있어 내가 확인해야합니다 :

이는 스케줄러에 대한 몇 가지 관련 클라이언트 측 코드 ..의 구성 및 save_form()와 show_lightbox 방법입니다 JSON 객체의 필드를 가져와 라이트 박스에 표시합니다.

어떻게 해결할 수 있는지 알고 계십니까? 감사!

+0

save_form 메소드에서 ev.studyunit = '1'을 추가하면 ev.whatever = foo를 추가 할 수 있습니다. 스케줄러에 사용자 정의 양식을 사용하는 경우 studyinit이라는 필드가 있어야 저장됩니다 데이터베이스에 저장하고 이벤트를 참조 할 때 검색 할 수 있습니다. – user2844810

답변

-1

Event 클래스의 추가 필드가 공개되어 있는지 확인하십시오. DHXEventsManager는 Class.getFields()를 사용하여 이벤트 속성을 가져옵니다. 속성이 private 인 경우 생성 된 JSON에서는 사용할 수 없습니다.

+0

이 질문에 대한 답을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남기십시오. 자신의 게시물에 언제나 댓글을 달 수 있으며 충분한 [평판] (http://stackoverflow.com/help/whats-reputation)을 갖게되면 [모든 게시물에 댓글을 달 수] 있어야합니다 (http://stackoverflow.com/help/privileges/comment). – Bucket