Primefaces schedule和selectEvent

时间:2014-05-18 09:27:03

标签: java jsf primefaces schedule

我现在使用5.0,但在4.0中也是如此。 3.5用得好。

我有一个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>

所以我搜索了解决方案,但我无法找到解决方案。我发现了总是很老的主要事件处理程序和解决方案。

移动和调整大小在事件处理程序之前有空指针异常。

请让我知道解决方案。

我把一个干净的方法调用加载到SessionScoped bean的方法:

@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中,我找到了可能有助于发现问题的内容。身份遗失。

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

在公共ScheduleEvent的DefaultScheduleModel中,getEvent(String id)id参数get &#34; e3fdce6b-8f4b-4b41-b6f4-19c0a9496e63&#34;值和for循环中的(ArrayList)events.size = 0(ScheduleEvent事件:事件) 但每当我在SessionScoped bean方法中检查id时,id为null。

1 个答案:

答案 0 :(得分:0)

解决方案更容易。只需添加一个null检查。

factor(x=c("High School", "College", "Masters", "Doctorate"),
         + levels=c("High School", "College", "Masters", "Doctorate"),
         + ordered=TRUE)