I am having a problem using the primefaces schedule component. It appears to work just fine, I can show it in different browser, resize event already inserted etc. The problem is when I try to add a new event. When I click to add an event, I get org.apache.jasper.el.JspMethodNotFoundException saying that '#{agendaHandler.onDateSelect}' Method not found: AgendaHandler@3f377.onDateSelect(org.primefaces.event.ScheduleDateSelectEvent). This is strange because the method in the controller class receive an instance of org.primefaces.event.DateSelectEvent not the one mentioned in the error. If I change the parameter to org.primefaces.event.ScheduleDateSelectEvent, I get a new error Type mismatch.
I was using the primefaces 1.0.2, but then I changed to the 1.1 RC1 and I still get the same error.
This is very strange because my code is exactly the same of the schedule showcase.
Here is my Controller class
Code: Select all
import java.util.Calendar;
import java.util.Date;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.event.DateSelectEvent;
import org.primefaces.event.ScheduleEntryMoveEvent;
import org.primefaces.event.ScheduleEntryResizeEvent;
import org.primefaces.event.ScheduleEntrySelectEvent;
import org.primefaces.model.DefaultScheduleEvent;
import org.primefaces.model.DefaultScheduleModel;
import org.primefaces.model.ScheduleEvent;
import org.primefaces.model.ScheduleModel;
public class AgendaHandler {
private ScheduleModel eventModel;
private ScheduleModel lazyEventModel;
private ScheduleEvent event = new DefaultScheduleEvent();
private String theme;
public AgendaHandler() {
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()));
}
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 teste(DateSelectEvent selectEvent) {
event = new DefaultScheduleEvent(Math.random() + "", 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);
}
public String getTheme() {
return theme;
}
public void setTheme(String theme) {
this.theme = theme;
}
}
Code: Select all
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@ taglib uri="http://primefaces.prime.com.tr/ui" prefix="p"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%--
This file is an entry point for JavaServer Faces application.
--%>
<html>
<f:view>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Odontologia Paula de Mendonça</title>
<p:resources />
</head>
<body>
<div id="wrapper"><!-- start header --> <!-- end header --> <!-- start page -->
<div id="page"><h:form>
<div id="content"><h:panelGroup id="grupoInfo">
<div id="panelConfirmacao" align="center"><h:messages
id="confirmacao" errorClass="erroConfirmacao"
infoClass="sucessoConfirmacao" layout="table" showSummary="true"
showDetail="false" globalOnly="true"></h:messages></div>
</h:panelGroup> <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="#{agendaHandler.eventModel}" editable="true" locale="en"
widgetVar="myschedule" id="teste"
dateSelectListener="#{agendaHandler.teste}"
eventSelectListener="#{agendaHandler.onEventSelect}"
eventMoveListener="#{agendaHandler.onEventMove}"
eventResizeListener="#{agendaHandler.onEventResize}"
onEventMoveUpdate="messages" onEventResizeUpdate="messages">
<p:scheduleEventDialog header="Event Details">
<h:panelGrid columns="2">
<h:outputLabel for="title" value="Title:" />
<h:inputText id="title" value="#{agendaHandler.event.title}"
required="true" />
<h:outputLabel for="from" value="From:" />
<p:inputMask id="from" value="#{agendaHandler.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="#{agendaHandler.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="#{agendaHandler.event.allDay}" />
<p:commandButton type="reset" value="Reset" />
<p:commandButton value="Save"
actionListener="#{agendaHandler.addEvent}"
oncomplete="myschedule.update();" />
</h:panelGrid>
</p:scheduleEventDialog>
</p:schedule></div>
<!-- end sidebars -->
<div style="clear: both;"> </div>
</h:form></div>
<!-- end page --></div>
<div id="footer"></div>
</body>
</f:view>
</html>
My AgendaHandler bean definition
Code: Select all
<managed-bean>
<managed-bean-name>agendaHandler</managed-bean-name>
<managed-bean-class>AgendaHandler</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Code: Select all
WARNING: /agenda.jsp(44,62) '#{agendaHandler.onDateSelect}' Method not found: AgendaHandler@3f377.onDateSelect(org.primefaces.event.ScheduleDateSelectEvent)
org.apache.jasper.el.JspMethodNotFoundException: /agenda.jsp(44,62) '#{agendaHandler.onDateSelect}' Method not found: AgendaHandler@3f377.onDateSelect(org.primefaces.event.ScheduleDateSelectEvent)
at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:71)
at org.primefaces.component.schedule.Schedule.broadcast(Schedule.java:438)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:444)
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:541)
at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Unknown Source)
22/07/2010 12:17:36 com.sun.faces.lifecycle.Phase doPhase
SEVERE: JSF1054: (Phase ID: APPLY_REQUEST_VALUES 2, View ID: /agenda.jsp) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@16535bf]
22/07/2010 12:17:36 org.apache.catalina.core.StandardWrapperValve invoke