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 객체의 필드를 가져와 라이트 박스에 표시합니다.
어떻게 해결할 수 있는지 알고 계십니까? 감사!
save_form 메소드에서 ev.studyunit = '1'을 추가하면 ev.whatever = foo를 추가 할 수 있습니다. 스케줄러에 사용자 정의 양식을 사용하는 경우 studyinit이라는 필드가 있어야 저장됩니다 데이터베이스에 저장하고 이벤트를 참조 할 때 검색 할 수 있습니다. – user2844810