我有以下xhtml代码段,其中有两个rich:calendar
(简单来说,搜索的日期范围):-
<h:panelGroup>
<h:outputText value="#{msg['lblstrtdteh']}" />
<h:outputText value=" *" escape="false" styleClass="reqField" />
</h:panelGroup>
<rich:calendar id="startDateFldVhrs" datePattern="dd-MM-yyyy" locale="#{sessionBean.locale}"
value="#{productsBean.startDate}" />
<h:panelGroup>
<h:outputText value="#{msg['lblenddteh']}" />
<h:outputText value=" *" escape="false" styleClass="reqField" />
</h:panelGroup>
<rich:calendar id="endDateFldVhrs" datePattern="dd-MM-yyyy"
value="#{productsBean.endDate}" />
这是我的bean的访问者:-
/**
*
* @return
*/
public Date getStartDate() {
return startDate;
}
/**
*
* @param startDate
*/
public void setStartDate(Date startDate) {
this.startDate = startDate;
System.out.println("setting startDate: " + startDate);
}
/**
*
* @return
*/
public Date getEndDate() {
return endDate;
}
/**
*
* @param endDate
*/
public void setEndDate(Date endDate) {
this.endDate = endDate;
System.out.println("setting endDate: " + endDate);
}
当我选择的日期与显示的日期不同时,我看不到setter方法的打印,当触发搜索按钮时(这两个日期都在搜索commandButton中执行),它也不会采用显示的值。 我缺少什么了吗?
这些字段已用new Date()
初始化,并且永远保持这种状态。
答案 0 :(得分:0)
在JSF中,仅在调用动作时(例如,在渲染或处理字段时,在将数据发布到服务器中时,在调用某些AJAX时)才调用set方法。
如果您想让rich:calendar调用您的set方法,则显示执行一些AJAX并更新您的字段。
Richfaces <= 3.X
<a4j:form>
<rich:calendar value="#{bean.date}" id="myCalendar">
<a4j:support event="onchanged" reRender="myCalendar" ajaxSingle="true"/>
</rich:calendar>
</a4j:form>
Richfaces 4.X +
<rich:calendar id="myCalendar">
<a4j:ajax event="change" execute="myCalendar" />
</rich:calendar>