Search code examples
javaoracle-maf

validateDateTimeRange tag for Oracle MAF


I'm trying to implement FROM and TO Date validation in Oracle MAF form.

In ADF I have seen the tag some thing like <af:validateDateTimeRange minimum="" maximum=""/>. From this blog you can get more details, It can be implemented in ADF application.

But I could't find such tag in Oracle MAF. Can you please suggest me, if you got any link to support this requirement?


Solution

  • As suggested by Frank, below is the workaround to achieve this.

    AMX Page:

    <amx:inputDate value="#{bindings.inspFromDate.inputValue}" label="From Date" showRequired="true" inputType="datetime" valueChangeListener="#{validationBean.dateValidation}"/>
    <amx:inputDate value="#{bindings.inspToDate.inputValue}" label="To Date" showRequired="true" inputType="datetime" valueChangeListener="#{validationBean.dateValidation}"/>
    

    ValidationBean.java

    public void dateValidation(ValueChangeEvent valueChangeEvent) throws ParseException {
        String fromDate = (String) AdfmfJavaUtilities.evaluateELExpression("#{bindings.inspFromDate.inputValue}");
        String toDate = (String) AdfmfJavaUtilities.evaluateELExpression("#{bindings.inspToDate.inputValue}");
        
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
        formatter.setTimeZone(TimeZone.getTimeZone("IST"));
    
        if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) {
            
            java.util.Date inputFromDate = formatter.parse(fromDate);
            java.sql.Timestamp formattedFromDate = new Timestamp(inputFromDate.getTime());
            
            java.util.Date inputToDate = formatter.parse(toDate);
            java.sql.Timestamp formattedToDate = new Timestamp(inputToDate.getTime());
            
            if (formattedFromDate.compareTo(formattedToDate) > 0) {
                System.out.println("fromDate is greater than toDate");
                throw new AdfException("From Date should be less than To Date.!", AdfException.INFO);
            } else if (formattedFromDate.compareTo(formattedToDate) < 0) {
                System.out.println("fromDate is less than toDate");
            } else if (formattedFromDate.compareTo(formattedToDate) == 0) {
                System.out.println("fromDate is equal to toDate");             
            }
        }
    }
    

    This method will get both from date and to date from the front screen and convert into timestamp format to validate which is greater.

    If From Date is greater than To Date, then it will show you the alert by saying that "From Date should be less than To Date.!". Below is the screenshot, how it will render in the front screen.

    enter image description here

    Hope this helps some one.!