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; 
} 

}