Value Change listener not working in primefaces calendar
In more recent versions of PrimeFaces, SelectEvent
should be usedsee the following code snippet
<p:calendar id="event" value="#{calendarView.date4}"> <p:ajax event="dateSelect" listener="#{calendarView.onDateSelect}" update="msgs" /></p:calendar>
public void onDateSelect(SelectEvent event) { FacesContext facesContext = FacesContext.getCurrentInstance(); SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Date Selected", format.format(event.getObject())));}
In older primefaces versions use DateSelectEvent
<p:ajax event="dateSelect" listener="#{caseUitility.dateChange}"/>
public void dateChange(DateSelectEvent event) { Date date = event.getDate(); System.out.println("File Date: " + date); System.out.println("Hello... I am in DateChange");}
You should add an update to your p:ajax. I had problems when selecting a date with the datepicker and when manually typing it in the field. The change event was not triggerd both ways. Therefore I used an p:ajax and a f:ajax with different events.
<p:calendar value="#{caseUitility.caseMaster.fileDate}" id="fileDate" effect="fadeIn" pattern="dd/MM/yyyy" readOnlyInputText="true"> <p:ajax event="dateSelect" listener="#{caseUitility.dateSelect}" update="lastDate"/> <f:ajax event="change" execute="@this" render="lastDate" listener="#{caseUitility.dateChange}"/></p:calendar>
And in the bean
public void dateSelect(DateSelectEvent event) { caseMaster.setFileDate(event.getDate()); System.out.println("File Date: " + caseMaster.getFileDate()); System.out.println("Hello... I am in DateChange");}public void dateChange(AjaxBehaviorEvent event) throws MWSException { System.out.println("File Date: " + caseMaster.getFileDate()); System.out.println("Hello... I am in DateChange");}
Hope this helps
My solution:
<p:ajax event="change" listener="#{caseUitility.dateChange}"/>
And in the bean:
public void dateChange(SelectEvent event) { date = (Date)event.getObject();}