У меня возникла проблема с применением дат к моему managedBean, поскольку я добавил jquerys datePicker в приложение.
Я прикрепляю указатель даты к двум полям даты, и он работает нормально (он появляется и позволяет выбратьдаты, поле ввода изменяется для правильного отображения выбранных дат).
myBean.java
public class MyBean {
private Date startDate;
private Date endDate;
public MyBean()
{
...
}
public void filterList()
{
...
}
public Date getStartDate()
{
return startDate;
}
public void setStartDate(Date startDate)
{
this.startDate = startDate;
}
public Date getEndDate()
{
return endDate;
}
public void setEndDate(Date startDate)
{
this.endDate = endDate;
}
}
myPage.xhtml:
<h:form id="my_requests_pending">
<rich:panel id="filter_panel">
<h:panelGrid rendered="#{myBean.filter}">
<h:panelGrid>
<h:outputText id="startDateLbl" value="#{messages['MyBeanMessages.startDate']}" />
<h:panelGrid>
<h:inputText id="startDate" value="#{mysBean.startDate}">
<f:convertDateTime pattern="E, d MMM, yyyy" timeZone="#{localeBean.timeZone}" />
</h:inputText>
</h:panelGrid>
</h:panelGrid>
<h:panelGrid>
<h:outputText value="#{messages['MyBeanMessages.endDate']}" />
<h:panelGrid>
<h:inputText id="endDate" value="#{myBean.endDate}">
<f:convertDateTime pattern="E, d MMM, yyyy" timeZone="#{localeBean.timeZone}" />
</h:inputText>
</h:panelGrid>
</h:panelGrid>
<h:panelGrid columns="1">
<h:commandButton id="myReqSubmitBtn" value="#{messages['MyBeanMessages.submit']}" action="#{myBean.filterList}" />
</h:panelGrid>
</h:panelGrid>
</rich:panel>
</h:form>
myCalendar.js
jQuery('startDate,endDate').datepicker.({
showOn : 'both',
changeMonth : true,
changeYear : true,
showOtherMonths : true,
selectOtherMonths : true,
showButtonPanel : true,
dateFormat : "D, d M, yy",
showAnim : "slideDown"
});
Проблема возникает, когда я отправляю свою форму.
Методы setStartDate / setEndDate вызываются дважды (я вижу это в режиме отладки).
Первый раз правильно устанавливает дату на новую измененную дату, а второй вызов сбрасывает ее обратно надата рождения.
Что-то происходит с жизненным циклом JSF, о котором я не знаю?
Любая помощь приветствуется.
ОБНОВЛЕНИЕ
Кажется, проблема в фазе JSF «Обновление модели».Он выводит следующий код отладки:
09-Nov-2011 16:02:26 org.exadel.jsf.PhaseTracker beforePhase
INFO: BEFORE UPDATE_MODEL_VALUES 4
- Затем он достигает точки останова в методе setStartDate () и корректно обновляет свойство startDate.
- Когда он покидает метод setStartDate ()затем он выполняет многочисленные вызовы библиотек jsf и т. д. и снова возвращается к моей точке останова в setStartDate ()!
- Затем я выхожу из метода и появляется следующий код отладки.
09-Nov-2011 17:06:21 org.exadel.jsf.PhaseTracker afterPhase
INFO: AFTER UPDATE_MODEL_VALUES 4
09-Nov-2011 17:06:21 org.exadel.jsf.PhaseTracker beforePhase
INFO: BEFORE INVOKE_APPLICATION 5