我正在使用Richfaces(3.3.1)日历组件作为日期选择器,并且还启用了日期字段编辑。我想限制用户手动输入20世纪之前或21世纪之后的任何日期 - 基本上年份的前两个字符应该是'19'或'20'。是否有开箱即用的方式,或者我是否需要自定义Richfaces日历组件?我不想在验证器中执行此操作,因为不同的日期具有不同的验证器,在这种情况下,我将有重复的代码,并且必须更改所有日期控件。
这里是代码段:
<rich:calendar value="#{selectedClaim.dateOfLoss}" required="true"
label="Date of loss" locale="en/US" popup="true"
datePattern="MM/dd/yyyy" enableManualInput="true"
cellWidth="24px" cellHeight="22px" style="width:200px"
inputSize="10" rendered="#{selectedClaim.id == 0}"
validator="#{claimUtils.checkEntryDate}">
</rich:calendar>
答案 0 :(得分:1)
您需要实现CalendarDataModel并将其指定为日历的dataModel。如果CalendarDataItem与您的条件不符,您可以禁用它。
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.richfaces.model.CalendarDataModel;
import org.richfaces.model.CalendarDataModelItem;
@Name("richCalendarDataModel")
@BypassInterceptors
public class RichCalendarDataModel implements CalendarDataModel {
public CalendarDataModelItem[] getData(Date[] arg0) {
RichCalendarDataItem[] date = new RichCalendarDataItem[arg0.length];
int i = 0;
for (Date dd : arg0) {
RichCalendarDataItem tmp = new RichCalendarDataItem(dd, enable_disableDate(dd));
date[i] = tmp;
i++;
}
return date;
}
private boolean enable_disableDate(Date dd) {
if (!isSunday(dd))
return true;
else
return false;
}
public Object getToolTip(Date arg0) {
...
}
...
}
CalendarDataModelItem:
import java.util.Date;
import org.richfaces.model.CalendarDataModelItem;
public class RichCalendarDataItem implements CalendarDataModelItem {
private Date data;
private boolean enabled;
public RichCalendarDataItem(Date dd, boolean en) {
data = dd;
enabled = en;
}
public int getDay() {
return 0;
}
public Object getData() {
return data;
}
public String getStyleClass() {
return null;
}
public Object getToolTip() {
return null;
}
public boolean hasToolTip() {
return false;
}
public boolean isEnabled() {
return enabled;
}
}