rich:calendar popup=false, showing only current month holidays.
nagendra_singh_krishnawat Oct 6, 2009 11:29 PMI am using rich calendar on page with popup equals false.
<rich:calendar value="#{holidayHome.instance.date}" popup="false" showApplyButton="false" mode="Client" preloadRangeBegin="#{calendarDataModel.beginDate}" preloadRangeEnd="#{calendarDataModel.endDate}" cellWidth="100px" cellHeight="100px" showWeekDaysBar="true" showHeader="true" boundaryDatesMode="none" showWeeksBar="true" onchanged="{ajaxSubmit();}" oncurrentdateselect="return true" dataModel="#{calendarDataModel}" valueChangeListener="#{calendarDataModel.valueChanged}" id="organizer" showFooter="true"> <a:outputPanel layout="block" id="cell" style="height:50%;"> <h:panelGrid columns="1"> <h:outputText value="{day}"/> <h:outputText value="{data.shortDescription.escapeHTML()}"/> <h:outputText value="{data.description.escapeHTML()}"/> </h:panelGrid> </a:outputPanel> </rich:calendar>
Implementation java class:
package com.westernasset.calendar.action; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.faces.event.ValueChangeEvent; import javax.persistence.EntityManager; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.richfaces.model.CalendarDataModel; import org.richfaces.model.CalendarDataModelItem; import com.westernasset.calendar.Holiday; /** * @author * */ @Name("calendarDataModel") @Scope(ScopeType.CONVERSATION) public class CalendarDataModelImpl implements CalendarDataModel { @In(create=true) EntityManager entityManager; private CalendarDataModelItem[] items; private String currentShortDescription; private Date currentDate, beginDate, endDate; private boolean currentDisabled; public CalendarDataModelItem[] getData(Date[] dateArray) { if (dateArray == null) { return null; } items = new CalendarDataModelItem[dateArray.length]; for (int i = 0; i < dateArray.length; i++) { items[i] = createDataModelItem(dateArray[i]); } return items; } /** * @param date * @return CalendarDataModelItem for date */ protected CalendarDataModelItem createDataModelItem(Date date) { CalendarDataModelItemImpl item = new CalendarDataModelItemImpl(); Map data = new HashMap(); //entityManager.find(Holiday.class, date); try{ String holidayname = ((Holiday)entityManager.createQuery("select holiday from Holiday holiday where holiday.date =:thisDate").setParameter("thisDate", date).getSingleResult()).getName(); data.put("shortDescription", holidayname); }catch (Exception e) { data.put("shortDescription", ""); } Calendar c = Calendar.getInstance(); c.setTime(date); item.setDay(c.get(Calendar.DAY_OF_MONTH)); item.setEnabled(true); item.setStyleClass("rel-hol"); item.setData(data); return item; } public Object getToolTip(Date date) { return null; } /** * @return items */ public CalendarDataModelItem[] getItems() { return items; } /** * @param setter for items */ public void setItems(CalendarDataModelItem[] items) { this.items = items; } /** * @param valueChangeEvent handling */ public void valueChanged(ValueChangeEvent event) { setCurrentDate((Date)event.getNewValue()); Calendar calendar = Calendar.getInstance(); calendar.setTime(getCurrentDate()); //setCurrentShortDescription((String)((HashMap)items[calendar.get(Calendar.DAY_OF_MONTH)-1].getData()).get("shortDescription")); } /** * Storing changes action */ public void storeDayDetails() { Calendar calendar = Calendar.getInstance(); calendar.setTime(getCurrentDate()); ((HashMap)items[calendar.get(Calendar.DAY_OF_MONTH)-1].getData()).put("shortDescription", getCurrentShortDescription()); } /** * @return currentDisabled */ public boolean isCurrentDisabled() { return currentDisabled; } /** * @param currentDisabled */ public void setCurrentDisabled(boolean currentDisabled) { this.currentDisabled = currentDisabled; } /** * @return currentShortDescription */ public String getCurrentShortDescription() { return currentShortDescription; } /** * @param currentShortDescription */ public void setCurrentShortDescription(String currentShortDescription) { this.currentShortDescription = currentShortDescription; } /** * @return currentDate */ public Date getCurrentDate() { return currentDate; } /** * @param currentDate */ public void setCurrentDate(Date currentDate) { this.currentDate = currentDate; } public Date getBeginDate() { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR, -365); return calendar.getTime(); } public Date getEndDate() { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR, 365); return calendar.getTime(); } }
I see that getData method is responsible for getting the data of each day, getData takes array of date for which it has to get the data(For UI to display).
I want the data for entire year, so ideally the getData method should be evoked with entire year array, but this is not happening, I see that whenever the calendar is loaded getData is evoked with only the current month date array. I dont know from where getData method is getting called.
I used preloadRangeBeggin and preloadRangeEnd but didnt helped.
Any idea abt this component ?