p:schedule - can't select event

UI Components for JSF
Post Reply
_walker_
Posts: 3
Joined: 27 May 2010, 10:45

19 Sep 2010, 15:31

I have following code

Code: Select all

<h:form>

            <p:ajaxStatus style="height:24px;display:block;">
                <f:facet name="start">
                    <h:graphicImage value="../design/ajaxloading.gif" />
                </f:facet>

                <f:facet name="complete">
                    <h:outputText value="" />
                </f:facet>
            </p:ajaxStatus>

            <p:growl id="messages" showDetail="true" />

            <p:schedule value="#{scheduleController.eventModel}" editable="true" widgetVar="myschedule"
                        eventSelectListener="#{scheduleController.onEventSelect}"
                        dateSelectListener="#{scheduleController.onDateSelect}"
                        eventMoveListener="#{scheduleController.onEventMove}"
                        eventResizeListener="#{scheduleController.onEventResize}"
                        onEventMoveUpdate="messages" onEventResizeUpdate="messages"
                        onDateSelectUpdate="eventDetails" onDateSelectComplete="eventDialog.show()"
                        onEventSelectUpdate="eventDetails" onEventSelectComplete="eventDialog.show()">

            </p:schedule>

            <p:dialog widgetVar="eventDialog" header="Event Details" showEffect="clip" hideEffect="clip">
                <h:panelGrid id="eventDetails" columns="2">
                    <h:outputLabel for="title" value="Title:" />
                    <h:inputText id="title" value="#{scheduleController.event.title}" required="true"/>

                    <h:outputLabel for="from" value="From:" />
                    <p:inputMask id="from" value="#{scheduleController.event.startDate}" mask="99/99/9999">
                        <f:convertDateTime pattern="dd/MM/yyyy" />
                    </p:inputMask>

                    <h:outputLabel for="to" value="To:" />
                    <p:inputMask id="to" value="#{scheduleController.event.endDate}" mask="99/99/9999">
                        <f:convertDateTime pattern="dd/MM/yyyy" />
                    </p:inputMask>

                    <h:outputLabel for="allDay" value="All Day:" />
                    <h:selectBooleanCheckbox id="allDay" value="#{scheduleController.event.allDay}" />

                    <p:commandButton type="reset" value="Reset" />
                    <p:commandButton value="Save" actionListener="#{scheduleController.addEvent}" oncomplete="myschedule.update();eventDialog.hide();"/>
                </h:panelGrid>
            </p:dialog>

        </h:form>

Code: Select all

@ManagedBean
@RequestScoped
public class ScheduleController {

	private ScheduleModel eventModel;

	private ScheduleModel lazyEventModel;

	private ScheduleEvent event = new DefaultScheduleEvent();

	public ScheduleController() {
		eventModel = new DefaultScheduleModel();
		eventModel.addEvent(new DefaultScheduleEvent("Champions League Match", previousDay8Pm(), previousDay11Pm()));
		eventModel.addEvent(new DefaultScheduleEvent("Birthday Party", today1Pm(), today6Pm()));
		eventModel.addEvent(new DefaultScheduleEvent("Breakfast at Tiffanys", nextDay9Am(), nextDay11Am()));
		eventModel.addEvent(new DefaultScheduleEvent("Plant the new garden stuff", theDayAfter3Pm(), fourDaysLater3pm()));

		lazyEventModel = new LazyScheduleModel() {

			@Override
			public void loadEvents(Date start, Date end) {
				clear();

				Date random = getRandomDate(start);
				addEvent(new DefaultScheduleEvent("Lazy Event 1", random, random));

				random = getRandomDate(start);
				addEvent(new DefaultScheduleEvent("Lazy Event 2", random, random));
			}
		};
	}

	public Date getRandomDate(Date base) {
		Calendar date = Calendar.getInstance();
		date.setTime(base);
		date.add(Calendar.DATE, ((int) (Math.random()*30)) + 1);	//set random day of month

		return date.getTime();
	}

	public Date getInitialDate() {
		Calendar calendar = Calendar.getInstance();
		calendar.set(calendar.get(Calendar.YEAR), Calendar.FEBRUARY, calendar.get(Calendar.DATE), 0, 0, 0);

		return calendar.getTime();
	}

	public ScheduleModel getEventModel() {
		return eventModel;
	}

	public ScheduleModel getLazyEventModel() {
		return lazyEventModel;
	}

	private Calendar today() {
		Calendar calendar = Calendar.getInstance();
		calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE), 0, 0, 0);

		return calendar;
	}

	private Date previousDay8Pm() {
		Calendar t = (Calendar) today().clone();
		t.set(Calendar.AM_PM, Calendar.PM);
		t.set(Calendar.DATE, t.get(Calendar.DATE) - 1);
		t.set(Calendar.HOUR, 8);

		return t.getTime();
	}

	private Date previousDay11Pm() {
		Calendar t = (Calendar) today().clone();
		t.set(Calendar.AM_PM, Calendar.PM);
		t.set(Calendar.DATE, t.get(Calendar.DATE) - 1);
		t.set(Calendar.HOUR, 11);

		return t.getTime();
	}

	private Date today1Pm() {
		Calendar t = (Calendar) today().clone();
		t.set(Calendar.AM_PM, Calendar.PM);
		t.set(Calendar.HOUR, 1);

		return t.getTime();
	}

	private Date theDayAfter3Pm() {
		Calendar t = (Calendar) today().clone();
		t.set(Calendar.DATE, t.get(Calendar.DATE) + 2);
		t.set(Calendar.AM_PM, Calendar.PM);
		t.set(Calendar.HOUR, 3);

		return t.getTime();
	}

	private Date today6Pm() {
		Calendar t = (Calendar) today().clone();
		t.set(Calendar.AM_PM, Calendar.PM);
		t.set(Calendar.HOUR, 6);

		return t.getTime();
	}

	private Date nextDay9Am() {
		Calendar t = (Calendar) today().clone();
		t.set(Calendar.AM_PM, Calendar.AM);
		t.set(Calendar.DATE, t.get(Calendar.DATE) + 1);
		t.set(Calendar.HOUR, 9);

		return t.getTime();
	}

	private Date nextDay11Am() {
		Calendar t = (Calendar) today().clone();
		t.set(Calendar.AM_PM, Calendar.AM);
		t.set(Calendar.DATE, t.get(Calendar.DATE) + 1);
		t.set(Calendar.HOUR, 11);

		return t.getTime();
	}

	private Date fourDaysLater3pm() {
		Calendar t = (Calendar) today().clone();
		t.set(Calendar.AM_PM, Calendar.PM);
		t.set(Calendar.DATE, t.get(Calendar.DATE) + 4);
		t.set(Calendar.HOUR, 3);

		return t.getTime();
	}

	public ScheduleEvent getEvent() {
		return event;
	}

	public void setEvent(ScheduleEvent event) {
		this.event = event;
	}

	public void addEvent(ActionEvent actionEvent) {
		if(event.getId() == null)
			eventModel.addEvent(event);
		else
			eventModel.updateEvent(event);

		event = new DefaultScheduleEvent();
	}

	public void onEventSelect(ScheduleEntrySelectEvent selectEvent) {
		event = selectEvent.getScheduleEvent();
	}

	public void onDateSelect(DateSelectEvent selectEvent) {
		event = new DefaultScheduleEvent("", selectEvent.getDate(), selectEvent.getDate());
	}

	public void onEventMove(ScheduleEntryMoveEvent event) {
		FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Event moved", "Day delta:" + event.getDayDelta() + ", Minute delta:" + event.getMinuteDelta());

		addMessage(message);
	}

	public void onEventResize(ScheduleEntryResizeEvent event) {
		FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Event resized", "Day delta:" + event.getDayDelta() + ", Minute delta:" + event.getMinuteDelta());

		addMessage(message);
	}

	private void addMessage(FacesMessage message) {
		FacesContext.getCurrentInstance().addMessage(null, message);
	}
}

Then I click on any event - eventSelectListener="#{scheduleController.onEventSelect}" invokes, but in

Code: Select all

public void onEventSelect(ScheduleEntrySelectEvent selectEvent) {
		event = selectEvent.getScheduleEvent();
	}
selectEvent.getScheduleEvent() = null.
Have you any ideas why?

I am using PrimeFaces-2.2.M1, Mojarra 2.0.3, Facelets, GlassFish 3.0.1

mSephiroth
Posts: 47
Joined: 15 Mar 2010, 22:09
Location: Guatemala
Contact:

03 Dec 2010, 00:04

Hello, I can confirm that problem.

ManagedBean:

Code: Select all

@ManagedBean(name = "MiAgendaMBean")
@SessionScoped
public class MiAgendaMBean {

    @EJB
    private AgdCalendarioEventoFacade agdCalendarioEventoFacade;
    private ScheduleModel eventModel;
    private ScheduleEvent event = new DefaultScheduleEvent();
    

    public ScheduleModel getEventModel() {
        return eventModel;
    }

    public void setEventModel(ScheduleModel eventModel) {
        this.eventModel = eventModel;
    }

    

    public ScheduleEvent getEvent() {
        return event;
    }

    public void setEvent(ScheduleEvent event) {
        this.event = event;
    }

   
    public ScheduleModel obtenerModeloAgendaDeUsuario(SisUsuario usuario) {
        try {
            eventModel = new DefaultScheduleModel();
            List<AgdCalendarioEvento> eventos = agdCalendarioEventoFacade.obtenerEventosPorUsuario(usuario);

            for (int i = 0; i < eventos.size(); i++) {
                //ScheduleEvent evento = new DefaultScheduleEvent(eventos.get(i).getTitulo(), eventos.get(i).getFecha(), eventos.get(i).getFecha(), false);
                //evento.setId(eventos.get(i).getIdAGDCalendarioevento().intValue() + "");
                eventModel.addEvent(new DefaultScheduleEvent(eventos.get(i).getTitulo() + " " + eventos.get(i).getIdSISCurso().getNombre(), eventos.get(i).getFecha(), eventos.get(i).getFecha(), eventos.get(i)));
            }

            return eventModel;
        } catch (Exception e) {
            mBeansUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("ErrorDePersistencia"));
            return null;
        }

    }

    public void onEventSelect(ScheduleEntrySelectEvent selectEvent) {
        DefaultScheduleEvent selectedEvent = (DefaultScheduleEvent) selectEvent.getScheduleEvent();
        
        System.out.println(selectEvent);
        System.out.println(selectedEvent);
    }
}

The xhtml code is:

Code: Select all

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <ui:composition template="/Templates/templateGeneral.xhtml">

        <ui:define name="head">
            <title>Mi agenda - #{bundle.NombreColegio}</title>
        </ui:define>
        <body>
            <ui:define name="top">
                <ui:include src="/includes/includeTop.xhtml"/>
            </ui:define>

            <ui:define name="bottom">
                <ui:include src="/includes/includeBottom.xhtml"/>
            </ui:define>

            <ui:define name="right">
                <ui:include src="/includes/PanelDerecho/PanelDerechoCurso.xhtml"/>
            </ui:define>

            <ui:define name="left">
                <ui:include src="/includes/AcercaDe_IndexCurso.xhtml"/>
                <h:form>
                    <p:menu model="#{MenuUsuarioMBean.obtenerMenuIndexCurso(rolUsuarioLogueado)}"/>
                </h:form>
            </ui:define>

            <ui:define name="center">
                    <h:form >
                        <h:panelGrid columns="1" >

                            <p:breadCrumb model="#{MenuUsuarioMBean.menuNavigateBar(
                                                   rolUsuarioLogueado,
                                                   curso.cursoActual, null)}"/>

                        </h:panelGrid>
                        <p:panel>

                            <p:schedule value="#{MiAgendaMBean.obtenerModeloAgendaDeUsuario(usuarioLoguedo)}" widgetVar="myschedule"
                                        eventSelectListener="#{MiAgendaMBean.onEventSelect}" editable="true" draggable="false" >
                            </p:schedule>

                        </p:panel>
                        <h:panelGrid columns="1">
                            <p:breadCrumb model="#{MenuUsuarioMBean.menuNavigateBar(
                                                   rolUsuarioLogueado,
                                                   curso.cursoActual, null)}"/>

                        </h:panelGrid>
                    </h:form>
            </ui:define>
        </body>
    </ui:composition>
</html>
Any ideas???

Glassfish v3
Mojarra 2.0.3, Facelets
PrimeFaces-2.2.RC2
Glassfish 3.x, Mojarra 2.1.0 (FCS 2.1.0-b11), Netbeans 6.9, PF 2.2.1, Ubuntu 9.10

I will...never be a mere memory!!

piergiorgioarmani
Posts: 10
Joined: 06 Dec 2010, 11:36

27 Jan 2011, 18:35

Hello, I can confirm that problem,too.
I use primefaces-2.2.RC2.
I 've tried the code from the showcase but:
selectEvent.getScheduleEvent() is null

Please tell me if someone has the solution to this problem
---------------------
PrimeFaces 3.5
Mojarra 2.0.3
Jboss 6 Final
Chrome Version 24.0.1312.57 m

Superstef
Posts: 7
Joined: 31 Aug 2010, 13:32

17 Feb 2011, 12:39

I have the same problem with the p:schedule eventSelectListener...
If I select an event in my scheduler, the getScheduleEvent() method on my ScheduleEntrySelectEvent object returns null.

Also the eventMoveListener and eventResizeListener won't call the specified methods (the breakpoints for both methods I have set in debug mode won't be called).

I'm using Primefaces 2.2.1 on Mojarra 2.0.4

PS: In the showcase the p:schedule eventSelect doesn't work too... In an older version the scheduler was fine...
Just like eventMove and eventResize... The growl doesn't show that the event has been moved (resized).

Superstef
Posts: 7
Joined: 31 Aug 2010, 13:32

17 Feb 2011, 12:53

Okay... I found the solution...
My Scope was incorrectly set to @RequestScoped
If I use @ViewScoped it works fine

smithh032772
Posts: 6144
Joined: 10 Sep 2011, 21:10

22 Nov 2011, 09:40

I'm experiencing the same, but @ViewScoped and @SessionScoped did NOT fix the issue. :(
Howard

PrimeFaces 6.0, Extensions 6.0.0, Push (Atmosphere 2.4.0)
TomEE+ 1.7.4 (Tomcat 7.0.68), MyFaces Core 2.2.9, JDK8
JUEL 2.2.7 | OmniFaces | EclipseLink-JPA/Derby | Chrome

Java EE 6 Tutorial|NetBeans|Google|Stackoverflow|PrimeFaces|Apache


Post Reply

Return to “PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 24 guests