0 Replies Latest reply on Mar 19, 2010 8:50 AM by Mark LoSacco

    Problem with CalendarDataModel getData() combined with timeZone attribute

    Mark LoSacco Newbie

      We are using the rich:calendar control in an organizer type fashion similar to what is done in the RichFaces demo.

       

      I have found that when I use the timeZone attribute to specify the desired timezone of the client, the block of dates passed into getData() is incorrect.

       

      For example when I initially display the calendar, the first call to getData() is correct - we are currently in March, so date[0] passed to getData is March 1 EST, and date[30] is correctly set to March 31 EDT.  Now when I click the < button to browse to the previous month in the calendar, getData is passed an incorrect array of dates - date[0] is set to January 2 EST (instead of February 1) and date[29] is set to January 30 EST.  Essentially the start date is 1 month less than it should be and 1 day more.

       

      The dates are off in a similar fashion no matter what method I use to browse to a different month of the calendar.

      The server is running under EDT and the timeZone being specified to the calendar is PDT.

       

      If I remove the timeZone attribute things start working as expected.

       

      Here is my code where I create the calendar:

      <rich:calendar popup="false" cellWidth="107px" 
           showFooter="false" showApplyButton="false" showWeeksBar="false"
           dataModel="#{calendarDataModel}"
           styleClass="organizer" mode="ajax"
           id="organizer" timeZone="#{timeZone}">
           <h:outputText value="{day}" style="font-size: 11px; font-weight:bold"/>
           <a4j:outputPanel layout="block" id="cell">
                <h:panelGrid columns="1" width="100%">
                     <h:outputText escape="false" value="{description}"/>
                </h:panelGrid>
           </a4j:outputPanel>
      </rich:calendar>

       

      And the relevant parts of calendarDataModel class:

       

      @Name("calendarDataModel")
      @Scope(ScopeType.CONVERSATION)
      public class CalendarDataModelImpl implements CalendarDataModel, java.io.Serializable {
          private static final long serialVersionUID = -6553800482303371625L;

          private CalendarDataModelItem[] items;
             
          @SuppressWarnings("unchecked")
          public CalendarDataModelItem[] getData(Date[] dateArray) {
              if ((dateArray == null) || (dateArray.length == 0)) {
                  return null;
              }

           

             // Creates eventHash of events in current month (removed)
             
              // Now build out calendar data model
              items = new CalendarDataModelItem[dateArray.length];
              for (int i = 0; i < dateArray.length; i++) {
                  items[i] = createDataModelItem(dateArray[i], eventHash.get(orgDateTime.getStartOfDay(dateArray[i])));
              }
          }
          return items;
      }

       

      Have I stumbled on a bug or could I be doing something wrong here?