2009-12-16 61 views
6

我的问题是使RichFaces日历限制日期被允许被用户选择 。Richfaces日历的最小和最大日期

比方说,我想只允许用户选择本月的日期和下个月的日期。

我使用了preloadDateRangeStart和preloadDateRangeEnd属性,但他们什么也没做。

我创建了我自己的CalendarDataModel,它使用preloadDateRangeStart和preloadDateRangeEnd并启用项目,但屏幕上的日历只允许选择当前月份的日期。请注意,preloadDateRangeStart是今天的日期,preloadDateRangeEnd是今天的日期加上2个月。

我很想念这里的东西。 有人可以帮我吗?

回答

3

使用isDayEnabled="isDayEnabled"属性,其中值(isDayEnabled)是你应该定义一个JavaScript函数,形式

function isDayEnabled(day) { 
} 

richfaces demo了解更多详情。

如果你想添加验证在服务器端,使用自定义JSF验证,或者使用Hibernate Validator注释(见RichFaces的 - 豆验证)

+0

这可以在服务器端完成吗? 我不想使用JavaScript。我将不得不在服务器上实现额外的验证! – DaTroop 2009-12-16 11:40:55

+0

手动实现服务器上的验证。使用自定义JSF'Validator'。或者,使用Hibernate Validator注释(请参阅richfaces - bean验证程序) – Bozho 2009-12-16 11:56:46

+0

已经完成了! 谢谢你的一切! – DaTroop 2009-12-16 12:17:05

1

我想通了,它是如何工作所以这里有云:

我创建了一个类,它实现了CalendarDataModel

虽然因为CalendarDataModel只关心万一preloadDateRangeStartpreloadDateRangeEnd之间的范围内指定他们,我没有使用preloadDateRangeStartpreloadDateRangeEnd属性。

CalendarDataModel禁止其日期是出于我的属性文件和我在CalendarDateModel使用,以确定项目的日期是为了禁止它的范围之间未指定日期范围内的日历项。

所以现在它工作得很好。这里是标签:

<a4j:outputPanel id="myCal" layout="block"> 
    <rich:calendar cellHeight="30px" cellWidth="30px" 
     dataModel="#{MyCalendarDataModel}" datePattern="dd/MM/yyyy" mode="ajax" 
     style="width:200px" value="#{MyPage.theDate}"/> 
</a4j:outputPanel> 

我也试过你的解决方案。它可以工作,但对客户来说有点麻烦。

再次感谢你

+0

您可以将Java代码发布到您的CalendarDataModel实现吗? – 2010-12-09 08:32:05

+0

Lazlo我没有代码。我改变了工作。看看实际的实现http://www.java2s.com/Open-Source/Java-Document/JBoss/richfaces-ui-3.1.4.GA/org/richfaces/CalendarDataModelImpl.java.htm,并让你的变化人。你的名字看起来像UUID版本5。 – DaTroop 2010-12-09 09:33:51