Table 更新和 Primefaces ScheduleEvent

Table update and Primefaces ScheduleEvent

你好我想请你帮忙解决我在项目中遇到的一个难题。 我正在使用 primefaces Schedule 来执行任务,为此我将所有事件存储在 MySQL table 命名议程中。 我的难题是 table 更新。当我第一次更新时,一切正常,但其他尝试失败,因为 mySQL 没有找到用于更新 table 中相关行的主键。 这是我的支持 bean 代码

public class AgendaBean implements Serializable{
private Agenda agenda;
private String title;
private Date dateDbt;
private Date dateFin;
private ScheduleModel eventModel;
private ScheduleEvent event;
@EJB
private AgendaDao agendaDao;
public AgendaBean(){
    agenda=new Agenda();
    event= new DefaultScheduleEvent(nom, dateDbt, dateFin, agenda) ;
}
@PostConstruct
public void init() {
    eventModel=new DefaultScheduleModel();
    agendas=agendaDao.listAgenda();
    for(Agenda agendItem:agendas){
        String title=agendItem.getTitle();
        Date dtDbt=new java.util.Date(agendItem.getDateDbt().getTime());
        Date dtFin=new java.util.Date(agendItem.getDateFin().getTime());
        event=(ScheduleEvent) new DefaultScheduleEvent(title, dtDbt, dtFin,agendItem);
        eventModel.addEvent(event);
    }
}
public void addEvent(ActionEvent actionEvent){
    if(event.getId() == null)
    {
        agenda.setDateDbt(new java.sql.Timestamp(event.getStartDate().getTime()));
        agenda.setDateFin(new java.sql.Timestamp(event.getEndDate().getTime()));
        agenda.setTitle(event.getTitle());
        agendaDao.creer(agenda);
     }
    else{
        eventModel.updateEvent(event);
        agenda.setDateDbt(new java.sql.Timestamp(event.getStartDate().getTime()));
        agenda.setDateFin(new java.sql.Timestamp(event.getEndDate().getTime()));
        agenda.setTitle(event.getTitle());
        agendaDao.modifier(agenda);
    }
    init();
}

public void onEventSelect(SelectEvent selectEvent) {
    event = (ScheduleEvent) selectEvent.getObject();
    Agenda agendaFound=(Agenda)event.getData();
    agenda.setDescription(agendaFound.getDescription());
    agenda.setLieu(agendaFound.getLieu());
    agenda.setPkIdag(agendaFound.getPkIdag());
}

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

}

我的查看代码如下

<h:panelGrid columnClasses="value">
    <p:schedule id="schedule" value="#{agendaBean.eventModel}" widgetVar="myschedule" timeZone="GMT"  process="@form" axisFormat="HH:mm" >
        <p:ajax event="dateSelect" listener="#{agendaBean.onDateSelect}" update="eventDetails" oncomplete="PF('eventDialog').show();" />
        <p:ajax event="eventSelect" listener="#{agendaBean.onEventSelect}" update="eventDetails" oncomplete="PF('eventDialog').show();" />
    </p:schedule>
</h:panelGrid>
<p:dialog widgetVar="eventDialog" header="Event" showEffect="clip" hideEffect="clip" height="400" width="400" id="eventDetails" resizable="false" >
    <h:outputLabel for="idCleAg">REF <span class="requis">*</span></h:outputLabel>
    <h:inputText id="idCleAg" value="#{agendaBean.agenda.pkIdag}"/>
    <br/>
    <h:outputLabel for="title">title <span class="requis">*</span></h:outputLabel>
    <p:inputText id="title" value="#{agendaBean.event.title}" required="true" maxlength="60" style="background:#fff;width:370px;margin-left:-4px;"/>
    <h:message id="titleMessage" for="title" errorClass="erreur" />
    <br/>
    <h:outputLabel for="place">Place<span class="requis">*</span></h:outputLabel>
    <p:inputText id="place" value="#{agendaBean.agenda.place}" required="true" maxlength="60" style="background:#fff;width:370px;margin-left:-4px;"/>
    <h:message id="placeMessage" for="place" errorClass="erreur" />
    <br/>
    <h:outputLabel for="description">Description<span class="requis">*</span></h:outputLabel>
    <p:inputTextarea id="description" value="#{agendaBean.agenda.description}" rows="10" cols="50" queryDelay="750" minQueryLength="4" required="true"/>
    <h:message id="descriptionMessage" for="description" errorClass="erreur" />
    <br/>
    <p:outputLabel for="from" value="From:" />
    <p:calendar  id="from" value="#{agendaBean.event.startDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
    <br/>
    <p:outputLabel for="to" value="To:" />
    <p:calendar id="to" value="#{agendaBean.event.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
    <br/>
    <p:commandButton id="addButton" value="Save" actionListener="#{agendaBean.addEvent}" update="@form" ajax="true" /> 
</p:dialog>

欢迎任何帮助!谢谢

尝试使用

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

我找到了这个 problem.It 的解决方案,只需将这一行写在方法 onEventSelect 中,如下所示

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