Есть ли способ проверки в rich: calendar, если выбранная дата раньше определенной даты? - PullRequest
2 голосов
/ 23 июня 2011

У меня есть этот компонент:

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

и мне нужно проверить, совпадает ли выбранная дата или до фактической даты в момент ... Есть ли как это сделать только с помощью rich: calendar или я должен подтвердить это дома?

Проблема решена! Я использовал решение, предоставленное Balusc. Спасибо всем! :)

Ответы [ 2 ]

10 голосов
/ 23 июня 2011

Чтобы проверить его на стороне сервера, вы можете использовать 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));
        }
    }

}
4 голосов
/ 23 июня 2011

Вы должны быть в состоянии сделать это с помощью JavaScript (так на стороне клиента). Если вы посмотрите на Client API doc , вы увидите, что есть функция getCurrentDate() JavaScript, предоставляемая компонентом rich: calendar.

Итак, вам нужно запустить функцию JavaScript для событий JavaScript ondateselected и oninputchange, которая будет использовать метод 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>
...