java - 计划事件是在前一天创建的

标签 java jsf primefaces

我正在尝试使用数据库实现 Primefaces Schedule:

        <p:outputLabel for="from" value="From:" />
        <p:calendar id="from" value="#{schedule.event.startDate}" timeZone="GMT+2" pattern="dd/MM/yyyy HH:mm"/>

        <p:outputLabel for="to" value="To:" />
        <p:calendar id="to" value="#{schedule.event.endDate}" timeZone="GMT+2" pattern="dd/MM/yyyy HH:mm"/>

        <p:outputLabel for="allDay" value="All Day:" />
        <h:selectBooleanCheckbox id="allDay" value="#{schedule.event.allDay}" />

        <p:commandButton type="reset" value="Reset" />
        <p:commandButton id="addButton" value="Save" actionListener="#{schedule.addEvent}" oncomplete="PF('myschedule').update();PF('eventDialog').hide();" />

        <p:commandButton value="Delete" oncomplete="PF('myschedule').update(); PF('eventDialog').hide();"
                         actionListener="#{schedule.deleteEvent}"/>
    </h:panelGrid>
</p:dialog>

CDI bean :

@Resource(name = "jdbc/DefaultDB")
private DataSource ds;
private ScheduleModel lazyEventModel;
private ScheduleEvent event = new DefaultScheduleEvent();

@PostConstruct
public void init()
{
    lazyEventModel = new LazyScheduleModel()
    {
        @Override
        public void loadEvents(Date start, Date end)
        {
            try
            {                   
                Connection conn = ds.getConnection();
                PreparedStatement ps = null;
                try
                {
                    ps = conn.prepareStatement("SELECT * FROM SCHEDULE WHERE START_DATE >= ? AND END_DATE < ?");

                    ps.setDate(1, new java.sql.Date(start.getTime()));
                    ps.setDate(2, new java.sql.Date(end.getTime()));
                    ResultSet rs = ps.executeQuery();
                    while (rs.next())
                    {
                        addEvent(new DefaultScheduleEvent(rs.getString("TITLE"), rs.getDate("START_DATE"), rs.getDate("END_DATE")));
                    }
                }
                finally
                {
                    if (ps != null)
                    {
                        ps.close();
                    }
                    conn.close();
                }
            }
            catch (Exception ex)
            {
                ex.printStackTrace();
            }
        }
    };
}

public ScheduleModel getEventModel()
{
    return lazyEventModel;
}

public ScheduleEvent getEvent()
{
    return event;
}

public void setEvent(ScheduleEvent event)
{
    this.event = event;
}

public void addEvent(ActionEvent actionEvent) throws Exception
{
    String title = event.getTitle();
    String description = event.getDescription();
    Date startDate = event.getStartDate();
    Date endDate = event.getEndDate();

    if (event.getId() == null)
    {
        insertData(title, description, startDate, endDate);
        lazyEventModel.addEvent(event);
    }
    else
    {
        updateData(title, description, startDate, endDate);
        lazyEventModel.updateEvent(event);
    }
    event = new DefaultScheduleEvent();
}

public void deleteEvent(ActionEvent actionEvent) throws Exception
{
    String title = event.getTitle();
    delete(title);
    lazyEventModel.deleteEvent(event);
}

public void onEventSelect(SelectEvent selectEvent)
{
    event = (ScheduleEvent) selectEvent.getObject();
}

public void onDateSelect(SelectEvent selectEvent)
{
    event = new DefaultScheduleEvent("", (Date) selectEvent.getObject(), (Date) selectEvent.getObject());
}

public void onEventMove(ScheduleEntryMoveEvent event) throws Exception
{
    String title = event.getScheduleEvent().getTitle();
    String description = event.getScheduleEvent().getDescription();
    Date startDate = event.getScheduleEvent().getStartDate();
    Date endDate = event.getScheduleEvent().getEndDate();

    updateData(title, description, startDate, endDate);

    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Event moved", "Day delta:" + event.getDayDelta() + ", Minute delta:" + event.getMinuteDelta());

    addMessage(message);
}

public void onEventResize(ScheduleEntryResizeEvent event)
{
    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Event resized", "Day delta:" + event.getDayDelta() + ", Minute delta:" + event.getMinuteDelta());

    addMessage(message);
}

private void addMessage(FacesMessage message)
{
    FacesContext.getCurrentInstance().addMessage(null, message);
}

public void updateData(String title, String description, Date startDate, Date endDate) throws SQLException, Exception
{
    Connection conn = ds.getConnection();
    PreparedStatement ps = null;
    boolean committed = false;
    try
    {
        conn.setAutoCommit(false);
        String updateComponentStats = "UPDATE SCHEDULE SET TITLE = ?, START_DATE = ?, END_DATE = ?, DESCRIPTION = ?, LAST_UPDATED = CURRENT_DATE WHERE TITLE = ?";

        ps = conn.prepareStatement(updateComponentStats);
        ps.setString(1, title);
        ps.setDate(2, new java.sql.Date(startDate.getTime()));
        ps.setDate(3, new java.sql.Date(endDate.getTime()));
        ps.setString(4, description);
        ps.setString(5, title);

        ps.executeUpdate();
        ps.close();

        conn.commit();
        committed = true;
    }
    finally
    {
        if (!committed)
        {
            conn.rollback();
        }

        if (ps != null)
        {
            ps.close();
        }
        conn.close();
    }
}

public void insertData(String title, String description, Date startDate, Date endDate) throws SQLException, Exception
{
    Connection conn = ds.getConnection();
    PreparedStatement ps = null;
    boolean committed = false;
    try
    {
        conn.setAutoCommit(false);
        String updateComponentStats = "INSERT INTO SCHEDULE (TITLE, START_DATE, END_DATE, DESCRIPTION, CREATED) "
            + " VALUES (?, ?, ?, ?, CURRENT_DATE)";
        ps = conn.prepareStatement(updateComponentStats);

        ps.setString(1, title);
        ps.setDate(2, new java.sql.Date(startDate.getTime()));
        ps.setDate(3, new java.sql.Date(endDate.getTime()));
        ps.setString(4, description);

        ps.executeUpdate();
        ps.close();

        conn.commit();
        committed = true;
    }
    finally
    {
        if (!committed)
        {
            conn.rollback();
        }

        if (ps != null)
        {
            ps.close();
        }
        conn.close();
    }
}

当我使用对话框创建新事件时,我成功地在前一天创建了新事件。当我插入新事件时,我将 java.util.Date 转换为 java.sql.Date

你能告诉我如何解决这个问题吗?

最佳答案

在您的 .xhtml 文件中,将其添加到其中

<p:schedule clientTimeZone="local"> </p:schedule>

关于java - 计划事件是在前一天创建的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37372261/

相关文章:

java - 如何从 LIferay/IceFaces/JSF portlet 支持 bean 中获取 url 请求参数

JSF - actionListener 标记调用不采用 ActionEvent 参数的方法

java - 为什么我的 play 框架构建有时会获取 oss-parent 依赖项?

java - 使用java从sql server存储过程中检索返回值

java - Akka FSM : How to write test case to verify state change?

javascript - 如何通过 onRowSelect ajax 事件调用 jQuery?

Java HashMap 逆向方式

javascript - 不支持使用 tinyMCE 编辑器的大文件内容

java - Primefaces selectOneMenu 过滤器不起作用

jsf - 将参数传递给同一页面中的对话框