如果所选日期在特定日期之前,是否有如何验证富:日历?

时间:2011-06-22 20:03:37

标签: jsf richfaces

我有这个组件:

<rich:calendar enableManualInput="true" value="#{home.born}" datePattern="dd/MM/yyyy" />

我需要验证所选日期是否相等,还是在实际日期之前... 有没有怎么做只有富人:日历或者我必须验证它到家里?

问题解决了!我使用了Balusc提供的解决方案。 谢谢大家! :)

2 个答案:

答案 0 :(得分:10)

要在服务器端验证它,您可以使用Validator

<rich:calendar ...>
    <f:validator validatorId="notAfterToday" />
</rich:calendar>

@FacesValidator("notAfterToday")
public class NotAfterTodayValidator implements Validator {

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        Date date = (Date) value;
        Date today = new Date();

        if (date.after(today)) {
            String message = "Date may not be later than today.";
            throw new ValidatorException(new FacesMessage(message));
        }
    }

}

答案 1 :(得分:4)

你应该能够使用JavaScript(所以在客户端)。如果你查看Client API doc,就可以看到rich:calendar组件提供了getCurrentDate() JavaScript函数。

所以你需要做的是在JavaScript事件ondateselectedoninputchange上启动一个JavaScript函数,它将使用getCurrentDate()方法并与当前日期进行比较。

类似的东西(我没有测试):

<h:form id="myForm">
    ...
    <rich:calendar id="myCalendar" enableManualInput="true" value="#{home.born}" datePattern="dd/MM/yyyy"
        ondateselected="checkDate();" oninputchange="checkDate();"/>
    ...

<script type="text/javascript">
function checkDate() {
    var choosenDate = $("myForm:myCalendar").component.getCurrentDate();
    var now = new Date();
    // Calculate the difference between the 2 dates.
    // This method may be modified if you want to only compare date (i.e. not time).
    var diff = choosenDate.getTime() - now.getTime();
    if (diff < 0) {
        // choosenDate is before today
        alert("Error in the selected date!");
        // Do what you want here...
    }
}
</script>