Java Primefaces计划并选择Event

Java Primefaces计划并选择Event,java,jsf,primefaces,schedule,Java,Jsf,Primefaces,Schedule,我现在使用5.0,但在4.0中也是如此。3.5版本的应用程序运行良好 我有一个ScheduleEvent实现,用jpa存储在postgreSQL表中。 我使用惰性数据模型,所以我可以持久化新事件并将其加载回。事件和标题显示在时间表中 ScheduleManager是一个会话范围的bean,我在其中处理ajax事件,如onEventMove、onEventResize和onEventSelect。 最后一个事件处理程序getObject方法返回null,因此我无法编辑事件 我的事件实现如下所示:

我现在使用5.0,但在4.0中也是如此。3.5版本的应用程序运行良好

我有一个ScheduleEvent实现,用jpa存储在postgreSQL表中。 我使用惰性数据模型,所以我可以持久化新事件并将其加载回。事件和标题显示在时间表中

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();
      }
   }
处理程序方法如下所示:

@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>
this.getValue().getEvent()返回null(getValue event ArrayList.size=0,这就是selectedEvent为null的原因)。 但这个在持久化对象之后运行,并且事件具有id,我在数据库中确认。事件加载回调度程序,我在视图中看到事件。当我加载回事件时,每个事件都有id值

在公共ScheduleEvent getEvent(字符串id)的DefaultScheduleModel中,id参数get “e3fdce6b-8F4B41-b6f4-19c0a9496e63”值和(ArrayList)events.size=0 at for循环(ScheduleEvent:events)
但是每次我在SessionScoped bean方法中检查id时,id都是空的。

解决方案要简单得多。只需添加一个null检查

 public ScheduleModel getEventModel() {
  if (lazyEventModel == null) {
     lazyEventModel = new LazyScheduleModel() {