2012-02-28 76 views
0

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

回答

1

你需要實現一個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; 
} 

}