2016-09-27 80 views
0

你好,我想問你的幫助,以解決我遇到的困難,我在我的項目。 我正在使用primefaces Schedule來執行任務,爲此我將所有事件存儲在名爲agenda的MySQL表中。 我很擔心表更新。當我第一次更新時,所有的東西都可以正常工作,但其他嘗試失敗,因爲mySQL沒有找到更新表中有關行的主鍵。 這是我支持bean代碼表更新和Primefaces ScheduleEvent

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> 

任何幫助將受到歡迎!謝謝

+0

我不知道@EJB批註細節的方法這一行,但是不應該的'初始化event'是在@PostConstruct方法內完成,而不是在構造函數內? – ChristophS

回答

0

嘗試使用

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

爲什麼這是上述問題的解決方案/請添加一些解釋 – Kukeltje

0

我已經找到了解決這一problem.It足以寫在onEventSelect像下面

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