Richfaces日历与20或21世纪的年份

时间:2012-02-28 19:06:55

标签: jsf richfaces

我正在使用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>

1 个答案:

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

}