Is there how to validate into rich:calendar if the date selected is before a specific date?

风格不统一 提交于 2020-01-15 03:53:34

问题


I have this component:

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

and i need to validate if the selected date is equal or before actual date at the momment... Is there how to do it only with rich:calendar or i must verify it into home?

Problem solved! i've used the solution provided by Balusc. Thanks everybody! :)


回答1:


To validate it on the server side, you can use a Validator.

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

with

@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));
        }
    }

}



回答2:


You should be able to do that using JavaScript (so on client side). If you look on the Client API doc, you can see that there is a getCurrentDate() JavaScript function provided by the rich:calendar component.

So what you have to do is to launch a JavaScript function on the JavaScript events ondateselected and oninputchange that will use the getCurrentDate() method and compare to the current date.

Something like that (I didn't test):

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

and

<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>


来源:https://stackoverflow.com/questions/6445827/is-there-how-to-validate-into-richcalendar-if-the-date-selected-is-before-a-spe

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!