Richfaces日历部分在20世纪或21世纪
问题描述:
我使用Richfaces(3.3.1)Calendar组件作为日期选择器,并且日期字段编辑也被启用。我想限制用户在20世纪之前或21世纪之后手动输入任何日期 - 基本上,年份前两个字符应该是'19'或'20'。有没有办法做到这一点,还是我需要自定义Richfaces日历组件?我不想在验证器中这样做,因为不同的日期有不同的验证器,在这种情况下,我会重复代码,并且必须更改所有日期控件。Richfaces日历部分在20世纪或21世纪
下面的代码片段:
<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>
答
你需要实现一个CalendarDataModel并将其指定为数据模型日历。如果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;
}
}