Timeline with add, edit and delete functionality was working fine until I upgraded. Right now I am using the following
PF 5.0
PF ext 2.0.0
Somehow event = e.getTimelineEvent() in the onEdit method is returning null. I am not able to figure out why
here is my code.
timeline.xhtml
Code: Select all
<p:panel>
<pe:timeline id="timeline" height="250px"
value="#{basicTimelineController.model}" editable="true"
var="milestone" timeZone="#{basicTimelineController.timeZone}"
widgetVar="timelineWdgt"
style="margin-top:10px; width: 750px !important;"
min="#{basicTimelineController.min}"
max="#{basicTimelineController.max}"
zoomMax="#{basicTimelineController.zoomMax}">
<p:ajax event="change" update="@none"
listener="#{basicTimelineController.onChange}" />
<p:ajax event="delete"
update=":delete-milestone-form:deleteMilestoneInner"
listener="#{basicTimelineController.onDelete}"
onstart="PF('timelineWdgt').cancelDelete()"
oncomplete="PF('deleteMilestoneWdgt').show()" />
<p:ajax event="edit"
update=":update-milestone-form:updateMilestoneInner"
listener="#{basicTimelineController.onEdit}"
oncomplete="PF('updateMilestoneWdgt').show()" />
<p:ajax event="add" update="@none" onstart="PF('timelineWdgt').cancelAdd()" />
</pe:timeline>
<p:commandButton value="Add Milestone" style="margin-top:15px;"
onclick="PF('addMilestoneWdgt').show()" />
<p:commandButton value="Save Timeline" style="margin-top:15px;"
immediate="true"
actionListener="#{basicTimelineController.saveTimeline()}" />
<p:commandButton value="Reset Timeline" style="margin-top:15px;"
immediate="true"
actionListener="#{basicTimelineController.resetTimeline()}" />
</p:panel>
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:form id="update-milestone-form">
<p:dialog id="updateMilestoneDlg" header="Milestone Details"
modal="true" dynamic="true" widgetVar="updateMilestoneWdgt"
showEffect="clip" hideEffect="clip">
<h:panelGroup id="updateMilestoneInner" layout="block">
<p:messages id="update-milestone-messages" closable="true" />
<h:panelGrid columns="2" cellpadding="3">
<h:outputText value="Milestone Type: " />
<p:selectOneMenu id="taskDisplayNames1"
value="#{basicTimelineController.milestoneToUpdate.taskName}"
required="true" requiredMessage="Please select milestone type"
update="taskName1">
<f:selectItem itemLabel="Select Task" itemValue="" />
<f:selectItems
value="#{basicTimelineController.milestoneTypeSelectItems}" />
<p:ajax event="change"
listener="#{basicTimelineController.milestoneTypeChanged}"
update="taskName1" />
</p:selectOneMenu>
<h:outputText value="Start Date: " />
<p:calendar widgetVar="startDate1" showButtonPanel="true"
effect="slideDown" pattern="dd/MM/yyyy"
mindate="#{basicTimelineController.getRequestStartDate()}"
maxdate="#{basicTimelineController.getRequestEndDate()}"
value="#{basicTimelineController.milestoneToUpdate.startDate}"
required="true" requiredMessage="Please select start date" />
<h:outputText value="Milestone Name: " />
<p:inputText id="taskName1"
value="#{basicTimelineController.milestoneToUpdate.taskDisplayName}"
required="true" requiredMessage="Please select task name" />
<h:outputText value="Notes: " />
<p:inputTextarea id="notes1"
value="#{basicTimelineController.milestoneToUpdate.notes}" />
</h:panelGrid>
</h:panelGroup>
<f:facet name="footer">
<p:commandButton value="Update"
update="update-milestone-messages updateMilestoneInner"
actionListener="#{basicTimelineController.updateMilestone()}"
oncomplete="PF('updateMilestoneWdgt').hide()" />
<p:commandButton value="Close" immediate="true"
update="update-milestone-form"
actionListener="#{basicTimelineController.closeMilestone()}"
onclick="PF('updateMilestoneWdgt').hide()" />
</f:facet>
</p:dialog>
</h:form>
</ui:composition>
Code: Select all
public void onEdit(TimelineModificationEvent e) {
this.dirtyBit = true;
event = e.getTimelineEvent();
this.milestoneToUpdate = (Milestone) event.getData();
this.milestoneToUpdate.setStartDate(event.getStartDate());
}
public void onChange(TimelineModificationEvent e) {
TimelineUpdater timelineUpdater = null;
if (this.admin) {
timelineUpdater = TimelineUpdater.getCurrentInstance(":seo-process-detail-form:seo-detail-tabview:timeline");
} else {
timelineUpdater = TimelineUpdater.getCurrentInstance(":pop_up_ui_form:detail-tabview:timeline");
}
event = e.getTimelineEvent();
model.update(event, timelineUpdater);
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "The milestone dates have been updated", null);
FacesContext.getCurrentInstance().addMessage(null, msg);
this.dirtyBit = true;
}
public void onDelete(TimelineModificationEvent e) {
event = e.getTimelineEvent();
this.dirtyBit = true;
}
I would appreciate any help
Thanks
Vidya A