自从我将jquerys datePicker添加到应用程序后,我在将日期应用到managedBean时遇到了问题。
我将日期选择器附加到两个日期字段并且工作正常(弹出并允许选择日期,输入字段更改以正确反映日期选择)。
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
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
答案 0 :(得分:0)
我的表单中也有以下代码(以前的日历功能中的旧代码)。
<h:panelGrid id="hiddendates" styleClass="panelgrid-nopad"
style="display:none">
<h:outputText id="formId" value="#{formId}" />
<h:inputText id="startDateHidden"
value="#{myRequestsBean.startDate}">
<f:convertDateTime pattern="dd/MM/yyyy"
timeZone="#{localeBean.timeZone}" />
</h:inputText>
<h:inputText id="endDateHidden" value="#{myRequestsBean.endDate}">
<f:convertDateTime pattern="dd/MM/yyyy"
timeZone="#{localeBean.timeZone}" />
</h:inputText>
</h:panelGrid>
这些字段的id为'startDateHidden'和'endDateHidden' 字段是否根据el值映射到setter / getters? (而不是该字段的实际ID)。