我現在使用5.0,但在4.0是做同樣的。 3.5版很好。Primefaces計劃和selectEvent
我有一個ScheduleEvent實現,我用jpa存儲在postgreSQL表中。 我使用懶惰數據模型,所以我可以堅持新的事件,並加載回來。事件和標題出現在schedult中。
ScheduleManager是一個會話範圍的bean,我處理ajax事件,如onEventMove,onEventResize和onEventSelect。 最後一個事件處理函數getObject方法返回null,所以我不能編輯事件。
我的情況下實現這樣的:
@Entity
@Table(name = "basescheduleevent")
@NamedQuery(name = "BaseScheduleEvent.findAll", query = "SELECT l FROM BaseScheduleEvent l")
public class BaseScheduleEvent implements ScheduleEvent, Serializable {
private static final long serialVersionUID = 6213082779383114637L;
private String id;
private String title;
private Object data;
private Date startDate;
private Date endDate;
private String description;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(unique = true, nullable = false)
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
@Lob
@Override
public Object getData() {
return this.data;
}
public void setData(Object data) {
this.data = data;
}
...
和處理方法是這樣的:
public void onEventSelect(SelectEvent selectEvent) {
ScheduleEvent event = (ScheduleEvent) selectEvent.getObject();
if (event != null) {
EventHistory eventHistory = (EventHistory) event.getData();
Subject subject = eventHistory.getSubject();
}
}
這裏是XHTML時間表:
<h:form id="ScheduleForm">
<p:schedule style="width:100%;height:100%" view="month" id="schedule" widgetVar="scheduleWidget"
timeZone="Europe/Budapest" widgetVar="scheduleWidget" locale="hu"
value="#{scheduleManager.eventModel}"
binding="#{scheduleManager.schedule}">
<p:ajax event="dateSelect"
listener="#{scheduleManager.onDateSelect}" update=":timerForm"
oncomplete="PF('timerDialogWidget').show();" />
<p:ajax event="eventSelect"
listener="#{scheduleManager.onEventSelect}" update=":timerForm"
oncomplete="PF('timerDialogWidget').show();" />
<p:ajax event="eventMove" listener="#{scheduleManager.onEventMove}" />
<p:ajax event="eventResize"
listener="#{scheduleManager.onEventResize}" />
</p:schedule>
</h:form>
所以我用Google搜索周圍的解決方案,但我找不到解決方案。我發現老式的黃金事件處理程序和解決方案。
移動並調整大小在事件處理程序之前有空指針異常。
請讓我知道解決方案。
我把乾淨的方法調用加載方法SessionScoped豆:
@Named
@SessionScoped
public class ScheduleManager implements Serializable {
private static final long serialVersionUID = 620934289508314544L;
private BaseScheduleEvent currentEvent;
private ScheduleModel lazyEventModel;
@Inject
private UserService userService;
@Inject
private ScheduleService scheduleService;
public ScheduleModel getEventModel() {
lazyEventModel = new LazyScheduleModel() {
private static final long serialVersionUID = -7030798462691388329L;
public void loadEvents(Date start, Date end) {
final TimeZone timeZone = TimeZone.getTimeZone("Europe/Budapest");
List<ScheduleEvent> eventList = scheduleService.loadEvents(
start, end, timeZone);
clear();
for (ScheduleEvent event : eventList) {
addEvent(event);
}
}
};
return lazyEventModel;
}
在Schedule.java我發現了一些可以幫助發現問題。一個id缺失。
else if(eventName.equals("eventSelect")) {
String selectedEventId = params.get(clientId + "_selectedEventId");
ScheduleEvent selectedEvent = this.getValue().getEvent(selectedEventId);
wrapperEvent = new SelectEvent(this, behaviorEvent.getBehavior(), selectedEvent);
this.getValue()。getEvent()給回零(的getValue事件ArrayList.size = 0,這是爲什麼selectedEvent爲空)。 但是,這個運行後堅持的對象,和事件有ID,我在數據庫確認。事件加載回調度器,我看到視圖中的事件。當我加載回事件時,每個都有id值。
在DefaultScheduleModel在公共ScheduleEvent getEvent(字符串ID)的ID參數獲得在for循環 「e3fdce6b-8f4b-4b41-b6f4-19c0a9496e63」 值和(ArrayList的)events.size = 0(ScheduleEvent事件:事件) 但是,每當我在SessionScoped bean方法中檢查id時,id爲null。